3 回答
TA贡献1848条经验 获得超10个赞
要使用你的猫的属性尾巴,你必须先施放你的猫
((Cat) dict['cat']).tail
因为当你把你的猫放在你的字典中时,如果你试图通过你的字典访问它,它会被认为是一个动物,而你的 Animal 类没有这个属性,而 Cat 类有
PS:如果你只有猫和狗,也许Animal可以有这个属性?
TA贡献2011条经验 获得超2个赞
您必须使用as运算符来转换字典条目,这在dict["cat"]错误地包含Dog. (Cat)dict["cat"]在这种情况下使用会抛出异常。
if (dict.ContainsKey("cat"))
{
Cat dictCat = dict["cat"] as Cat;
if (dictCat != null)
{
// use dictCat
}
}
字典只会将值视为Animals,因此每次要使用派生类的成员时确实都必须进行强制转换。
正如 CodeNotFound 在评论中提到的,模式匹配(在 C# 7 中引入)是另一种可用的选项。
if (dict.ContainsKey("cat") && dict["cat"] is Cat cat)
{
// Dealing with cat :)
}
TA贡献2021条经验 获得超8个赞
首先,你不必做
dict["cat"] = (Cat) new Cat();
dict["dog"] = (Dog) new Dog();
由于Cat和Dog派生自Animal,您可以直接分配它们
dict["cat"] = new Cat();
dict["dog"] = new Dog();
现在,要访问单个属性,请使用
(dict["cat"] as Cat)?.tail
其中已经包括null通过?.运营商的支票
- 3 回答
- 0 关注
- 158 浏览
添加回答
举报