2012-07-26 90 views
5

我有一个包含很多对象的列表List<MyObjects> - Im遍历这个列表并读取对象。这很好。我现在只是放弃了,如果我可以给这个List增加1个特殊值 - 不是对象,只有1个值(一个字符串),那将会是多么的棒。添加属性到列表?

我现在就可以创建

class Needless 
{ 
    public List<MyObjects> MyList { get; set; } 
    public string MyValue { get; set; } 
} 

,但我试着去避免的类。我真的需要1个字符串和每个输入List<MyObjects>任何想法?

+0

“MyValue”与“MyList”中的值无关吗? – 2012-07-26 14:59:17

+0

MyValue标识MyList – miri 2012-07-26 15:01:44

+0

它会在这种情况下将'MyList'和'MyValue'添加到'Dictionary',比如'Dictionary >'吗? – 2012-07-26 15:02:47

回答

8

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

如果是“范围内”的工作,你总是可以让匿名类型:

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

但这只是真的有效益的方法的范围。编译器可以为此提供IntelliSense,它在编译时是强类型的。

或者,如果你真的想全力以赴,用ExpandoObjectSystem.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,但我不记得原因。一个人只能希望推理是健全的,但它可能是一个开发人员越来越头晕的新玩具...

+2

+1只是表明这一点。 – mellamokb 2012-07-26 15:00:45

2

你可以继承列表,并简单地添加你的财产,它比一个组合列表更清洁

0

您可以使用您的Needless类扩展List实现。这样你仍然可以把你的列表当成一个列表。