【问题标题】:How to access a custom collection property by its property name如何通过属性名称访问自定义集合属性
【发布时间】:2012-02-15 16:00:00
【问题描述】:

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

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

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;

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

感谢您的帮助。

【问题讨论】:

  • 您仍然希望能够使用索引访问它们吗?还是按名称访问就足够了?
  • 按名称访问和遍历集合比按索引访问对象更常见。

标签: c#


【解决方案1】:

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

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

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

方法二 创建您自己的支持索引的集合类型 由你的任意类型。

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 可能是我正在寻找的。迭代是否会对使用索引产生重大影响?我的集合不会包含超过 30 个属性实例。
【解决方案2】:

您可以使用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"];

【讨论】:

  • 名称、值是我的 Property 类的简化版本。我应该提到它,它还有其他成员。
【解决方案3】:

为此目的使用Dictionary&lt;string,Property&gt;。键是属性名称,值是属性实例本身。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    相关资源
    最近更新 更多