我有一个包含大量对象List<MyObjects>
的列表 - 我正在迭代这个列表并读取对象。多数民众赞成。我现在只是重新开始,如果我可以为这个List增加1个特殊值,那将是多么棒的东西 - 不是一个Object,只是一个值的某个值(一个字符串)。
我现在可以创建一个像
这样的类class Needless
{
public List<MyObjects> MyList { get; set; }
public string MyValue { get; set; }
}
但我试图避免这种情况。我真的需要一个带有输入的字符串List<MyObjects>
任何想法?
答案 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实现。这样,您仍然可以将列表视为列表。