C#中的'as'关键字是否仅将对象类型变量转换为我想要的类型?

时间:2019-11-21 11:43:33

标签: c#

从C#官方文档中,我了解到可以使用'as'关键字将一种类型转换为另一种类型。但是,当我进行测试时,似乎一切都没有按预期进行(如果我做错了,请纠正我)。当我转换对象类型变量或类型具有“具有关系”(继承)时,则可以正常工作。但是,如果我尝试转换确实具有“具有关系”的两个不同类型,则IDE(Visual Studio 2019)会给我一个错误(而不是返回null)。如果我错了或做错了什么,请纠正我。

代码如下:

class Program
{
    static void Main(string[] args)
    {
        Person person = new Person();

        Animal animal = person as Animal; // the IDE shows an error under "person as Animal"
    }
}

class Person
{ }

class Animal
{ }

非常感谢您的回复。

2 个答案:

答案 0 :(得分:3)

这是因为IDE会分析您的代码,并且知道无法将Person转换为Animal。

此代码不会给您错误,而是返回null:

class Program
{
    static void Main(string[] args)
    {
        Object person = new Person();

        Animal animal = person as Animal;
    }
}

class Person
{ }

class Animal
{ }

请注意,它仍然会告诉您该表达式始终为null,但不会被归类为错误。

这样做的原因是因为Person和Animal是两个不兼容的特定类型,但是Object类型可以包含任何内容,并且尚不清楚是否是不兼容的类型。

答案 1 :(得分:0)

如果Animal不是Person或这两个类不继承同一个父级?