在下面的代码中,编译器显然不能确定“t”的正确类型。C#IS运算符不能用于lambda表达式吗?
_supportedElements.Any(t => element is t)
将鼠标悬停在第二个t之上并没有像往常那样提及类型。编译器给出了一个没有类型或名称空间t的错误。当我更改为
private Type[] _supportedElements = { typeof(TextField), typeof(CheckBox), typeof(RadioButton), typeof(SelectList), typeof(TableRow), typeof(Link), typeof(Button) };
:
_supportedElements.Any(t => elementGetType() == t)
没有编译器错误,并且还徘徊第二吨以上鼠标正确地指出的类型
_supportedElements被定义为。但我真的需要使用IS运算符。
这是Visual Studio 2013 SP4中的怪癖还是我自己......?
编辑:
所有的回应后,它很清楚,现在的怪癖是在我这里 我的目的是创建一个类型来验证当前的类型与数组。这是不可能的,我没有意识到当我用“typeof”包围类名时,我创建了一个实例数组。 错误消息被我误解为“你没有声明t,我不知道它”,而不是“你必须在”is“之后使用Type,而不是类型实例”。
我真的很感激例子和替代方案的快速反应。希望我会对其他人在Stackoverflow站点有所帮助:-)
为什么你需要使用'is'运营商? – 2015-02-09 12:27:39
什么是'元素'? – Yuck 2015-02-09 12:28:20
因为_supportedElements是一个类型数组,所以is运算符看起来不太可能是你想要的,也就是说它们全都是x是System.Type而不是其他很多其他的 – tolanj 2015-02-09 12:30:51