public static bool Is(this object o, IEnumerable<Type> types)
{
return types.Any(t => o is t);
}
这是一个简单的扩展方法,用于测试对象是否是提供的类型之一 - 用于使代码更具可读性。
无论如何它说它找不到t
是什么(t
的第二个实例)。它在lambda函数中使用之前已经非常明确地定义了,并且将鼠标悬停在它的第一个实例 Intellisense 上甚至告诉我它是(参数) Type t
。
对此非常困惑,因为我不知道为什么VS无法解决这个问题。偶尔 Intellisense 会起作用并重新启动VS会修复它,但不是这次。
(顺便说一句,这是VS2013)
编辑:我不同意这是重复的。这个问题来自一个完全不同的角度,并且有一个不同的接受答案。
答案 0 :(得分:3)
问题是is
运算符需要左侧的对象和右侧的类型名称。文字类型名称,而不是类System.Type的实例。
从您的代码中,我想您要做的是检查某个对象是否是由其System.Type表示的某种类型的实例。在这种情况下,您需要使用类型<{p>的IsInstanceOfType method
return types.Any(t => t.IsInstanceOfType(o));
答案 1 :(得分:0)
o is t
的问题是t
需要是一个类型而不是一个持有类型的变量。相反,你可以这样做:
return types.Any(t => o.GetType() == t);
或者:
return types.Any(t => t.IsInstanceOfType(o));
这将确保类型完全匹配。如果您关心从其他类型继承的类型,那么这更准确:
return types.Any(t => o.GetType().IsAssignableFrom(t));