5

我有一个包含很多对象的列表List<MyObjects>- 我遍历这个列表并读取对象。没关系。我现在才意识到,如果我可以在这个列表中再添加 1 个特殊值——不是对象,只是某物的 1 个值(一个字符串),那将是多么棒。

我现在可以创建一个类

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

但我试图避免这种情况。我真的只需要一个带有输入的字符串,每个有List<MyObjects>什么想法吗?

4

3 回答 3

8

Tuple<string, List<MyObject>>是一种选择。但是,如果您要经常使用这种配对,我建议您创建一个自定义类以使其更加明确 - 就像您所做的那样,或者通过派生字符串List<MyObject>并将其添加为属性。

如果您在“范围内”工作,您总是可以创建匿名类型:

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

但这仅在方法的范围内真正有好处。编译器可以为此提供 IntelliSense,并且它在编译时是强类型的。

或者,如果您真的想全力以赴,请使用ExpandoObjectfrom 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在我们的测试代码中使用,但我不记得为什么。人们只能希望推理是合理的,但很可能是开发人员对新玩具感到头晕目眩……

于 2012-07-26T15:00:35.233 回答
3

您可以继承 List 并简单地添加您的属性,这比在另一个类中组合 List 要干净一些

于 2012-07-26T15:01:20.050 回答
0

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

于 2012-07-26T15:01:46.180 回答