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
,但我不记得原因。一个人只能希望推理是健全的,但它可能是一个开发人员越来越头晕的新玩具...
“MyValue”与“MyList”中的值无关吗? – 2012-07-26 14:59:17
MyValue标识MyList – miri 2012-07-26 15:01:44
它会在这种情况下将'MyList'和'MyValue'添加到'Dictionary',比如'Dictionary>'吗? –
2012-07-26 15:02:47