2012-07-26 32 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