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 吗?

谢谢

C# -- 我们应该在索引器方法中强制转换为 get

不,不需要。在Dictionary<TKey, TValue>中,索引器声明为:

public TValue this[TKey key] { get; set; }

对于listPeople字段中的Dictionary<string, Person>TValue 将替换为 Person ,因此索引器将返回对Person对象的引用。

不,该强制转换不是必需的。字典的索引器已经强类型化以返回Person(因为这就是该字典的TValue)。这是泛型:)的好处之一

当然,找出这一点的最简单方法是删除强制转换并查看 - 如果字典索引器没有强类型,您的代码将无法编译,因为您一直在尝试返回 object(或其他)类型为 Person 的索引器。

不,这不是必需的,但是如果您删除(人员)并编译它,您会发现。