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))
时,isInstanceOfTypeInt
是true
。然而,if(intLikeTypes.Any(x => x.IsInstanceOfType(listType))
条件是false
。为什么x.IsInstanceOfType(listType)
无法正确找到实例?
顺便说一下,linq
命令适用于list<int>
类型以外的columnValue
。例如,它适用于int
类型。
替换条件
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