从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
{ }
非常感谢您的回复。
答案 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或这两个类不继承同一个父级?