2012-07-26 53 views
2

可能重複:
C# generic list <T> how to get the type of T?獲取型和投第二個變量爲該類型

我有一個列表變量,我想獲得該列表的類型和投出第二個變量到那種類型。爲了清晰起見,我添加了以下代碼。

目前,我有以下幾點:

return _ValueList.Any<FieldType>(x => x.Equals((FieldType)fieldValueObject)); 

我想要做這樣的事情:

Type valueType = _ValueList.GetType(); 

return _ValueList.Any<FieldType>(x => x.Equals((valueType)fieldValueObject)); 

任何幫助將不勝感激。

更新:當fieldValueObject的類型的Int16的,我嘗試將其轉換爲的Int32

一個無效轉換異常被拋出。

更新2:

我用以下解決方案:

 if (fieldValueObject.GetType() == typeof(Int16)) 
     { 
      fieldValueObject = Convert.ToInt32(fieldValueObject); 
     } 
     return _ValueList.Any<FieldType>(x => x.Equals(fieldValueObject)); 

這是不漂亮,但它的工作原理。

+0

你試圖完成什麼?您是否嘗試使用字符串值過濾數字列表?看到其餘的功能將有所幫助。 – Alex 2012-07-26 10:51:15

+0

我想檢查一個通用列表中是否存在一個值。我測試的值是從數據庫中獲取的,當我將它轉換爲列表類型時,它會引發異常。 – FreddieGericke 2012-07-26 11:09:56

回答

0
public bool ContainsAny<T>(List<T> valueList, T fieldValueObject) 
{ 
    return valueList.Any(x => x.Equals(fieldValueObject)); 
} 

public bool ContainsAny<T>(List<T> valueList, object fieldValueObject) 
{ 
    return valueList.Any(x => x.Equals((T)fieldValueObject)); 
} 

注意,第二個可以拋出一個InvalidCastException。

+0

這兩個方法都可以正常工作,除非fieldValueObject是Int16類型,我嘗試將其轉換爲Int32。 – FreddieGericke 2012-07-26 09:23:18

+0

@FreddieGericke如果你絕對必須做一個演員,考慮使用類型轉換器。 '(T)TypeDescriptor.GetConverter(typeof運算(T))ConvertFrom(fieldValueObject);' – 2012-07-26 09:26:30