添加属性到列表?

时间:2012-07-26 14:58:06

标签: c# .net list

我有一个包含大量对象List<MyObjects>的列表 - 我正在迭代这个列表并读取对象。多数民众赞成。我现在只是重新开始,如果我可以为这个List增加1个特殊值,那将是多么棒的东西 - 不是一个Object,只是一个值的某个值(一个字符串)。

我现在可以创建一个像

这样的类
class Needless
{
  public List<MyObjects> MyList { get; set; }
  public string MyValue { get; set; }
}

但我试图避免这种情况。我真的需要一个带有输入的字符串List<MyObjects>任何想法?

3 个答案:

答案 0 :(得分:8)

Tuple<string, List<MyObject>>是一个选项。但是,如果你打算使用这个配对很多,我会建议创建一个自定义类,使其更加明确 - 或者像你做的那样,或者通过派生List<MyObject>并添加字符串作为属性。

如果您在“范围内”工作,您可以随时使用匿名类型:

var t = new { TheString = "", TheList = new List<MyObject>() };
var list = t.TheList;
var s = t.TheString;

但这只会在方法范围内带来好处。编译器可以为此提供IntelliSense,并且在编译时强类型化。

或者,如果你真的想全力以赴,请使用ExpandoObject中的System.Dynamic

var expando = new ExpandoObject();
expando.List = new List<MyObject>();
expando.TheString = "";

这是在没有任何IntelliSense支持的情况下在线键入的,并将调用DLR。 ExpandoObject只是在引擎盖下使用IDictionary<string, object>,所以......

var dict = (IDictionary<string, object>)expando;

...有效。

最后一个选项是诙谐。它会起作用,但与其他选项相比,它的开发经验并不理想。也就是说,我们在测试代码中使用ExpandoObject,但我不记得为什么。人们只能希望推理是合理的,但很可能是开发商对新玩具感到头晕......

答案 1 :(得分:2)

你可以继承List并简单地添加你的属性,它比在另一个类中复合List更清晰

答案 2 :(得分:0)

您可以使用Needless类扩展List实现。这样,您仍然可以将列表视为列表。