Tuple<string, List<MyObject>>
是一种选择。但是,如果您要经常使用这种配对,我建议您创建一个自定义类以使其更加明确 - 就像您所做的那样,或者通过派生字符串List<MyObject>
并将其添加为属性。
如果您在“范围内”工作,您总是可以创建匿名类型:
var t = new { TheString = "", TheList = new List<MyObject>() };
var list = t.TheList;
var s = t.TheString;
但这仅在方法的范围内真正有好处。编译器可以为此提供 IntelliSense,并且它在编译时是强类型的。
或者,如果您真的想全力以赴,请使用ExpandoObject
from 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
在我们的测试代码中使用,但我不记得为什么。人们只能希望推理是合理的,但很可能是开发人员对新玩具感到头晕目眩……