如何通过其属性名称访问自定义集合属性

时间:2012-02-15 07:26:54

标签: c#

我想实现一个包含我的类实例的自定义集合。

这是我的课,这里有点简化。

public class Property : IComparable<Property> 
{
   public string Name;
   public string Value;
   public string Group;
   public string Id;
   ...
   ...

   public int CompareTo(Property other)
   {
      return Name.CompareTo(other.Name);
   }
}

我将Property的实例添加到List集合

Public List<Property> properties;

我可以遍历属性或通过索引位置访问特定属性。

但我希望能够通过其名称访问该属性,以便

var myColor = properties["Color"].Value;

我没有一种有效的方法来做到这一点。我假设应该将属性编写为自定义列表集合类来实现此目的。有没有人有我可以看的代码示例?

感谢您的帮助。

3 个答案:

答案 0 :(得分:1)

您可以使用Dictionary

Dictionary<string, Property> properties = new Dictionary<string, Property>();

//you add it like that:
properties[prop.Name] = prop;

//then access it like that:
var myColor = properties["Color"];

答案 1 :(得分:1)

已经提到过最简单的方法,但我看到两个:

方法1 转换为字典并在那里查找。

var props = properties.ToDictionary( x => x.Name );
Property prop = props["some name"];

方法2 创建自己的集合类型,以支持索引 你的任意类型。

public class PropertyCollection : List<Property>
{
    public Property this[string name]
    {
        get
        {
            foreach (Property prop in this)
            {
                if (prop.Name == name)
                    return prop;
            }
            return null;
        }
    }
}

并改为使用此集合

PropertyCollection col = new PropertyCollection();
col.Add(new Property(...));
Property prop = col["some name"];

答案 2 :(得分:0)

为此目的使用Dictionary<string,Property>。键将是属性名称,值将是Property实例本身。