2017-03-29 14 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'作爲給定的類型。 –

相關問題