我可以通过.Net中基于字符串的索引从List <t>获取元素吗? (I.E。:T val = List <t> [“NameHere”])</t> </t>

时间:2014-12-21 20:14:12

标签: c# .net string list properties

在C#/ .Net中,我知道使用DataSet,您可以DataSet.Tables[NameHere]访问指定的表格。

是否可以使用List执行此操作(如果列表中的元素具有可以像这样找到它们的属性?)

我不是在谈论List<T>.Find(tVar => tVar.Prop == "NameHere")

我希望能够说T val = List<T>["NameHere"]

这是可能的,如果是的话,我将如何实现这一目标?

另外,作为一种旁白,我确信它有一个正确的名称:它是什么?

3 个答案:

答案 0 :(得分:1)

它被称为“索引器”,从here

中了解更多信息

您可以创建自己的类来实现IList接口并为其添加索引器。

答案 1 :(得分:1)

为您的类型创建KeyedCollection<TKey,TValue>

public class SomeClass
{
    public string Name { get; set; }
    public string Value { get; set; }
}

public class SomeClassCollection : KeyedCollection<string,SomeClass>
{
    protected override string GetKeyForItem(SomeClass item)
    {
        return item.Name;
    }
}

[TestClass]
public class KeyedCollectionTests
{
    [TestMethod]
    public void Test()
    {
        var items = new SomeClassCollection
                    {
                        new SomeClass{Name = "Name 1", Value = "Value 1"},
                        new SomeClass{Name = "Name 2", Value = "Value 2"}
                    };

        items["Name 1"].Value.Should().Be("Value 1");
        items[1].Value.Should().Be("Value 2");
    }
}

答案 2 :(得分:0)

@Will您将通过将自己与性能影响区分开来为代码库添加额外的复杂功能。我认为你的问题可以通过利用.Net

中的现有功能来解决

有两种方法可以解决您的问题

  1. 使用List指向您的对象集,以允许您按int AND进行索引 使用Dictionary指向同一组对象以允许您索引我的字符串。对象可以由多个集合引用

  2. 将DataTable与Int列和字符串列一起使用,在每列上放置一个索引并使用Find函数。 (不确定是否可以在每个列上添加索引,如db表,因为我很长时间没有使用DataTable但是我确信你可以查找MSDN文档)