按索引访问对象,但在C#中按名称访问

Ewe*_*ton 3 c# indexing properties

我必须上课,父亲和孩子(例如)

我的实现的片段

类Father.cs

public class Father
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<Child> Children { get; set; }

    public Father()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

类Child.cs

public class Child
{
    public int Id { get; set; }
    public string Name { get; set; }

    public Child()
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

我想尝试做这样的事情

        Father f = new Father();
        f.Children[0]; // ok
        f.Children[1]; // ok
        f.Children["John"]; // Duh!
Run Code Online (Sandbox Code Playgroud)

我现在,它错了,我需要在Child Class中实现一些东西,我尝试了这个

    public Child this[string name]
    {
        get
        {
            return this;
        }
    }
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

如何为我的班级Child实现此功能?

Mar*_*ell 6

A List<T>没有字符串索引器; 你可以在Father课堂上添加一个,但用法是:

var child = parent["Fred"];
Run Code Online (Sandbox Code Playgroud)

(没有小孩)

对于索引器本身:尝试(在索引器中):

return Children.FirstOrDefault(c=>c.Name==name);
Run Code Online (Sandbox Code Playgroud)

要在列表本身上获取索引器,您必须创建自定义列表类型并在那里添加索引器.

IMO,一种方法可能更清楚(在父亲身上):

public Child GetChildByName(string name) {...}
Run Code Online (Sandbox Code Playgroud)