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

本文关键字:属性 访问 何通过 自定义 集合 | 更新日期: 2023-09-27 18:24:32

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

这是我的课,这里稍微简化一下。

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);
   }
}

我正在将属性实例添加到列表集合

Public List<Property> properties;

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

然而,我希望能够通过其名称访问该物业,以便

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

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

谢谢你的帮助。

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

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

方法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"];

您可以使用字典:

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"];

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