查询C#中另一个列表中的列表

aka*_*ari 4 c#

我有一个这样的课

public class Tbl
{
    public List<Row> Rows {get; set;}
}
public class Row
{
    public string Name {get; set;}
    public Value {get; set;}
}
//Using the class  
//Add rows to Tbl
Tbl t = new Tbl();
t.Rows.Add(new Row() {Name = "Row1", Value = "Row1Value"};
t.Rows.Add(new Row() {Name = "Row2", Value = "Row2Value"};
t.Rows.Add(new Row() {Name = "Row3", Value = "Row3Value"};

//Now I want to select the Row2 in this list, usually, I use this way
public Row GetRow(this Tbl t, string RowName)
{
    return t.Rows.Where(x => x.Name == RowName).FirstOrDefault();
}
Row r = t.GetRow("Row2");
//But I would like to use that way
Row r = t.Rows["Row2"];
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点.

感谢您的每一条评论.

Ber*_*ron 5

扩展属性不存在,但您可以使用包装并向其List<Row>添加Indexer属性.

public class RowList : List<Row> {

    public Row this[string key] {
        get { return this.Where( x => x.Name == key ).FirstOrDefault(); }
    }
}
Run Code Online (Sandbox Code Playgroud)
public class Tbl
{
    public RowList Rows { get; set; }
}

Tbl t = new Tbl();
// ...
Row r = t.Rows["Row2"];
Run Code Online (Sandbox Code Playgroud)