2017-03-29 12 views
0

我有这样的代码:使用类型,而不是特定的类

if (((Classes.ProductGroup)o).ToString().Contains(comboBox.Text)) 
    return true; 
else 
    return false; 

现在我想不指定部分Classes.ProductGroup。我想使它具有普遍性。

如何使用Type对象替换零件Classes.ProductGroup

Type type = typeof(Classes.ProductGroup); 

事情与此类似:

if (((type)o).ToString().Contains(comboBox.Text)) 

这可能吗?

下面是完整的方法代码:

private void FilterPGsinComboBox(object obj) 
{ 
    if (!Dispatcher.CheckAccess()) 
    { 
     Dispatcher.Invoke(new FilterPGsinComboBoxDelegate(this.FilterPGsinComboBox),obj); 
     return; 
    } 
    Type type = ((Dictionary<ComboBox, Type>)obj).First().Value; 
    ComboBox comboBox = ((Dictionary<ComboBox, Type>)obj).First().Key; 
    comboBox.IsDropDownOpen = true; 
    CollectionView itemsViewOriginal = (CollectionView)CollectionViewSource.GetDefaultView(comboBox.ItemsSource); 

    itemsViewOriginal.Filter = ((o) => 
    { 
     if (String.IsNullOrEmpty(comboBox.Text)) 
      return true; 
     else 
     { 
      if (((Classes.ProductGroup)o).ToString().Contains(comboBox.Text)) 
       return true; 
      else 
       return false; 
     } 
    }); 

    itemsViewOriginal.Refresh(); 
} 
+2

所有对象都有'ToString()'。 cast是多余的 – ASh

+0

什么是'o'并且请提供你想要实现的功能 –

+2

使用[泛型](https://msdn.microsoft.com/en-us/library/512aeb7t.aspx) – dotctor

回答

1

string ToString()方法定义在基地Object级。投到具体类型是多余的。

string filter = comboBox.Text; 

itemsViewOriginal.Filter = o => String.IsNullOrEmpty(filter) || 
           o != null && o.ToString().Contains(filter); 
1

您可以使用仿制药,并建立类似

public bool ClassNameContainString<T>(string text) where T : class 
{ 
    var containsString = typeof(T).ToString().Contains(text); 

    return containsString; 
} 

的方法。如果你想使这种方法不区分大小写变化的逻辑

var containsString = typeof(T).ToString().ToLower().Contains(text.ToLower()); 
+1

我的理解是OP想要做'((T)o).ToString()'。它不完全清楚,但从一个对象转换到使用一个类型似乎不像从一个对象转换为一个固定对象变成一个可变对象。 – Chris

+1

但这个功能不会错过对象'o'?然后我处于我以前的状况...... –

+0

克里斯,你是对的。我想把'o'作为给定的类型。 –

相关问题