在下面的代码中,编译器显然无法确定" t"的正确类型。
_supportedElements.Any(t => element is t)
将鼠标悬停在第二个t之上并没有像往常一样提及类型。编译器给出了一个错误,即没有类型或命名空间t。
_supportedElements定义为:
private Type[] _supportedElements = { typeof(TextField), typeof(CheckBox), typeof(RadioButton), typeof(SelectList), typeof(TableRow), typeof(Link), typeof(Button) };
当我将其更改为:
_supportedElements.Any(t => elementGetType() == t)
没有编译器错误,并且将鼠标悬停在第二个t上方正确地指出了类型。但我真的需要使用IS运算符。
这是Visual Studio 2013 SP4或我自己的怪癖......?
编辑:
在您的所有回复之后,很明显现在怪癖在我身边...... 我的目的是创建一个包含类型的数组来验证当前类型。那是不可能的,当我用" typeof"包围类名时,我没有意识到我创建了一个实例数组。 错误信息被我误解为"你没有声明,我不知道"而不是"你必须在""之后使用Type,而不是类型实例"。
我非常感谢通过示例和替代方案快速响应。希望我能在Stackoverflow网站上为其他人提供帮助: - )
答案 0 :(得分:3)
您正在检查一个实例is
是否是另一个实例,而不是类型。
答案 1 :(得分:2)
这是Visual Studio 2013 SP4或我自己的怪癖......?
它是你。编译器告诉你这个问题。您没有遵循语法,即
someInstance is ClassName
你不能这样做:
someInstance is typeof(ClassName)
你可以这样做:
someInstance.GetType() == typeof(ClassName)
答案 2 :(得分:1)
var element = new MyType();
Type[] _supportedElements = { typeof(MyType), typeof(int), typeof(string)};
// True
var isAcceptedType = _supportedElements.Any(t => t.IsAssignableFrom(element.GetType()));
var notSupportedElement = 'a';
// False
isAcceptedType = _supportedElements.Any(t => t.IsAssignableFrom(notSupportedElement.GetType()));