如何在不知道确切类型的情况下修改对象。 我在不知道其确切类型的情况下访问函数中的子元素时遇到问题。 这是我的例子。我尝试了显式和隐式转换。我在官方网站或 YouTube 视频中找不到这个主题。
public class Animal
{
public int age;
}
public class Deer:Animal
{
public int horn_length;
}
public class Giraffe:Animal
{
public int neck_length;
}
void function(Animal pet)
{
if(pet is Deer)
{
pet.horn_length++; //Error
(Deer)pet.horn_length++; //Error
}
if(pet is Giraffe)
{
pet.neck_length++; //Error
(Giraffe)pet.neck_length++; //Error
}
Deer Jack = (Deer)pet; //Error
(pet as Deer).horn_length++; //Error
}
is
运算符允许您将类型测试的结果分配给新的局部变量,如下所示:
if(pet is Deer deer)
{
deer.horn_length++; //no longer an error, because deer is a `Deer`
}