在C#/ .Net中,我知道使用DataSet
,您可以DataSet.Tables[NameHere]
访问指定的表格。
是否可以使用List执行此操作(如果列表中的元素具有可以像这样找到它们的属性?)
我不是在谈论List<T>.Find(tVar => tVar.Prop == "NameHere")
,
我希望能够说T val = List<T>["NameHere"]
。
这是可能的,如果是的话,我将如何实现这一目标?
另外,作为一种旁白,我确信它有一个正确的名称:它是什么?
答案 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
中的现有功能来解决有两种方法可以解决您的问题
使用List指向您的对象集,以允许您按int AND进行索引 使用Dictionary指向同一组对象以允许您索引我的字符串。对象可以由多个集合引用
将DataTable与Int列和字符串列一起使用,在每列上放置一个索引并使用Find函数。 (不确定是否可以在每个列上添加索引,如db表,因为我很长时间没有使用DataTable但是我确信你可以查找MSDN文档)