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

问题描述 投票:0回答:2

[从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
{ }

非常感谢您的回复。

c#
2个回答
2
投票

这是因为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类型可以包含任何内容,尚不清楚是否是不兼容的类型。


0
投票

如果动物不是人,或者这两个类不继承同一个父项?

© www.soinside.com 2019 - 2024. All rights reserved.