linq命令有什么问题

本文关键字:问题 什么 命令 linq | 更新日期: 2023-09-27 18:20:10

我想找到Enumerable的类型。我的代码是这样的:

Type[] intLikeTypes = new[] { typeof(int), typeof(decimal), typeof(long), typeof(float) };
List<int> columnValue = new List<int>();
columnValue.Add(1);
columnValue.Add(2);
var listType = columnValue.GetType().GetGenericArguments()[0];
Type listGenericType = columnValue.GetType().GetGenericTypeDefinition();
if (listGenericType == typeof(List<>))
{
    bool isInstanceOfTypeInt = (listType == typeof(int));
    if (intLikeTypes.Any(x => x.IsInstanceOfType(listType)))
        resColumnValue=preProcessValue(columnVal, false, false);
    else if (listType is string)
        resColumnValue=preProcessValue(columnVal, true, false);
}

当我使用bool isInstanceOfTypeInt = (listType == typeof(int))时,isInstanceOfTypeInttrue。然而,if(intLikeTypes.Any(x => x.IsInstanceOfType(listType))条件是false。为什么x.IsInstanceOfType(listType)无法正确找到实例?

顺便说一下,linq命令适用于list<int>类型以外的columnValue。例如,它适用于int类型。

linq命令有什么问题

替换条件

if (intLikeTypes.Any(x => x.IsInstanceOfType(listType)))

带有

if (intLikeType.Any(x => x == listType))

顺便说一下,条件

if (listGenericType == typeof(List<>))

总是被评估为true,我认为没有理由将其评估为false。

更新

方法CCD_ 12确定";类型";的变量是特定类型的,它不能确定该类型是否与另一种类型相同(您的代码正在执行的情况)

例如,考虑以下示例

int s = 5;
bool test = typeof(int).IsInstanceOfType(s);

"test"变量的值将为true,因为s变量的类型为int

但是以下代码将评估为错误

Type intType = typeof(int);
bool test = typeof(int).IsInstanceOfType(intType);

这里的"test"变量将具有值"false",因为类型为"false"的变量"intType";类型";不是int

这是该方法的部分文档

返回值

类型:System.布尔

如果当前类型在o表示的对象的继承层次结构中,或者当前类型是实现的接口,则为true。如果这两个条件都不是,如果o为null,或者当前Type是开放泛型类型(即ContainsGenericParameters返回true),则为false。

有关详细信息,请参阅此方法的文档。

https://msdn.microsoft.com/en-us/library/system.type.isinstanceoftype(v=vs.110).aspx