获取类型并将第二个变量转换为该类型[重复]

Posted

技术标签:

【中文标题】获取类型并将第二个变量转换为该类型[重复]【英文标题】:Get type and cast second variable to that type [duplicate] 【发布时间】:2012-07-26 08:40:13 【问题描述】:

可能重复: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));

它不漂亮,但它有效。

【问题讨论】:

你想要完成什么?您是否尝试使用字符串值过滤数字列表?查看函数的其余部分会有所帮助。 我正在尝试检查一个值是否存在于通用列表中。我正在测试的值是从数据库中检索的,当我将其转换为列表类型时,它会引发异常。 【参考方案1】:
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。

【讨论】:

这两种方法都可以正常工作,除非 fieldValueObject 是 Int16 类型并且我尝试将其转换为 Int32。 @FreddieGericke 如果您绝对必须进行强制转换,请考虑使用类型转换器。 (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFrom(fieldValueObject);

以上是关于获取类型并将第二个变量转换为该类型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

002.变量类型转换运算符

php笔记2.0——php中的变量数据类型及转换运算符流程控制

C#变量/数据类型转换/运算符使用

Swift 3:如何动态加载图像并将变量传递给第二个视图控制器?

将 BigDecimal 转换为 Integer

第二章 变量和基本类型