C#运算符'is'参数

MarengoHue

我正在开发一款有趣的小型游戏,但偶然发现C#的is操作符令人困惑。这是代码:

public static InventorySlot FindSlotWithItem(this IInventory inventory, Type itemType)
{
    return inventory.InventorySlots.FirstOrDefault(t => t is itemType);
}

就目前而言,此代码无法编译,因为我的Visual Studio告诉我找不到类型或名称空间名称“ itemType”。我想知道为什么会这样,并在MSDN上寻找了一些信息。这是我发现的:

is(C#参考):检查对象是否与给定类型兼容。例如,以下代码可以确定对象是MyObject类型的实例还是从MyObject派生的类型

这些行使我更加困惑,因为我显然将对象作为第一个参数,将类型作为第二个参数。我知道这与编译器寻找称为“ itemType”的类型有关,但这并不是我想要的行为。

请告诉我为什么这样的语法不起作用,为什么'is'运算符不将'itemType'视为类型。

大卫

这里的问题是Type该类的对象与对该类的编译时常量引用不同。相反,Type对象只是封装类的matadata的对象,因此不能用于直接创建变量,调用静态成员,作为泛型传递或以is实际类引用的方式调用

话虽如此,以上所有操作都有仅利用元数据的解决方法。对于类型比较,请尝试

t => itemType.IsAssignableFrom(t.GetType());

这将检查“是否itemType可以为类型的变量分配类型的值t.GetType()”-这将不仅检查类型,还可以很好地接受多态类型而不会产生任何抱怨。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

C#运算符'is'参数

来自分类Dev

方法参数中的 C# 空条件运算符

来自分类Dev

使用C#中的参数化查询在SQL中为IN运算符发送参数

来自分类Dev

C#将按位运算符作为参数传递

来自分类Dev

二进制运算符的参数之一必须是包含类型c#

来自分类Dev

如何在C#中约束通用参数的运算符?

来自分类Dev

C#将按位运算符作为参数传递

来自分类Dev

二进制运算符的参数之一必须是包含类型c#

来自分类Dev

参数末尾的&运算符

来自分类Dev

重载运算符的参数太多,Visual Studio C ++

来自分类Dev

C-函数参数和“ <<”运算符

来自分类Dev

在C ++中将运算符作为参数发送

来自分类Dev

Postfix运算符重载中的虚拟参数的目的?C ++

来自分类Dev

正参数的C余数/模运算符定义

来自分类Dev

C ++中重载运算符的参数顺序

来自分类Dev

C ++:使用运算符=调用多参数构造函数

来自分类Dev

在C ++中使用float参数重载=运算符

来自分类Dev

重载运算符的参数太多,Visual Studio C ++

来自分类Dev

用|在c函数中查询 参数中的运算符

来自分类Dev

<=和>运算符作为函数参数

来自分类Dev

在函数参数中使用<<运算符

来自分类Dev

对象列表作为IN运算符的参数

来自分类Dev

未为参数定义运算符^

来自分类Dev

运算符+和float参数

来自分类Dev

参数绑定和IN运算符

来自分类Dev

<<具有多个参数的运算符

来自分类Dev

以运算符为参数的宏

来自分类Dev

调用运算符参数评估顺序

来自分类Dev

+具有多个参数的运算符