C# IS 运算符不能用于 lambda 表达式?
C# IS operator cannot be used in lambda expression?
在下面的代码中,编译器显然无法确定 "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" 包围类名时,我没有意识到我创建了一个实例数组。
错误消息被我误解为 "You did not declare t, I don't know it" 而不是 "you must use a Type after "is", not a type instance".
我非常感谢您对示例和备选方案的快速响应。希望我能对 Whosebug 网站上的其他人有所帮助:-)
您正在检查一个实例是否 is
另一个实例,而不是类型。
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()));
这是 Visual Studio 2013 SP4 还是我自己的怪癖...?
是你。编译器告诉你问题所在。您没有遵循
的语法
someInstance is ClassName
你不能这样做:
someInstance is typeof(ClassName)
你可以这样做:
someInstance.GetType() == typeof(ClassName)
在下面的代码中,编译器显然无法确定 "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" 包围类名时,我没有意识到我创建了一个实例数组。 错误消息被我误解为 "You did not declare t, I don't know it" 而不是 "you must use a Type after "is", not a type instance".
我非常感谢您对示例和备选方案的快速响应。希望我能对 Whosebug 网站上的其他人有所帮助:-)
您正在检查一个实例是否 is
另一个实例,而不是类型。
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()));
这是 Visual Studio 2013 SP4 还是我自己的怪癖...?
是你。编译器告诉你问题所在。您没有遵循
的语法someInstance is ClassName
你不能这样做:
someInstance is typeof(ClassName)
你可以这样做:
someInstance.GetType() == typeof(ClassName)