C# -- 我们应该在索引器方法中强制转换为 get
本文关键字:转换 get 方法 我们 索引 | 更新日期: 2023-09-27 17:56:48
public class PeopleCollection : IEnumerable
{
private Dictionary<string, Person> listPeople = new Dictionary<string, Person>();
// This indexer returns a person based on a string index.
public Person this[string name]
{
get {
return (Person)listPeople[name]; // **Is this cast necessary?**
}
set {
listPeople[name] = value;
}
}
..
}
问题:我们应该将返回值从 listPeople[name]
转换为 Person
吗?
谢谢
不,不需要。在Dictionary<TKey, TValue>
中,索引器声明为:
public TValue this[TKey key] { get; set; }
对于listPeople
字段中的Dictionary<string, Person>
,TValue
将替换为 Person
,因此索引器将返回对Person
对象的引用。
不,该强制转换不是必需的。字典的索引器已经强类型化以返回Person
(因为这就是该字典的TValue
)。这是泛型:)的好处之一
当然,找出这一点的最简单方法是删除强制转换并查看 - 如果字典索引器没有强类型,您的代码将无法编译,因为您一直在尝试返回 object
(或其他)类型为 Person
的索引器。
不,这不是必需的,但是如果您删除(人员)并编译它,您会发现。