在.net中创建对列表

时间:2009-12-07 11:29:06

标签: .net

我需要创建List<>对我的类。如: List<Class1, Class2>

你会怎么做? 我不能使用“Pair”数据类型,因为它位于system.web.UI。

你会创建一个数组列表吗? 创建两个类的结构并将它们添加到列表中?

还有另一种我不知道的方式而且我只是一个菜鸟吗?

注意: 我不希望列表以任何方式自动排序。

12 个答案:

答案 0 :(得分:9)

我只是用这个:

var list = List<KeyValuePair<String, String>>;

或任何其他数据类型当然。这意味着您正在访问list(0).Keylist(0).Value,但除非我在外部公开列表,否则这不会让我感到烦恼。

答案 1 :(得分:8)

只需创建自己的配对类:

class Pair<TFirst, TSecond> {

  public TFirst First { get; set; }

  public TSecond Second { get; set; }

}

像这样初始化:

Pair<String, String> pair = new Pair<String, String> {
  First = "first",
  Second = "second"
};

.NET(4.0)的下一个版本具有元组,这是解决该问题的更通用的解决方案。

答案 2 :(得分:3)

我知道有些人对此感到不舒服 - 请参阅讨论here - 但是没有什么可以阻止您在非Web项目中引用System.Web,然后您可以非常愉快地使用System.Web.UI.Pair

答案 3 :(得分:2)

正如Hans Kesting指出的那样,你可以创建自己的Pair类,但是这样的构造往往会掩盖这样一个事实,即你试图配对的两种类型之间的关系实际上代表了你的API中更强的概念。 / p>

因此,如果您明确地将该对显示为具有良好命名的强概念,则代码可能更具可读性,而不是以通用Pair(或Tuple)结尾。

答案 4 :(得分:1)

您可以创建自己的Pair类......

答案 5 :(得分:1)

它旨在用于词典,但您可以使用KeyValuePair

答案 6 :(得分:1)

您可以使用通用字典而不是通用列表吗?

答案 7 :(得分:1)

我同意使用字典单元,您可以使用与字典相同的多个值,这些值与字典值相同。

如果你真的需要配对,你可以创建一个类来完成它并像这样使用它:

List<Pair<string, int>> pairs = new List<Pair<string, int>>();
pairs.Add(new Pair<string, int>("entry1", 1));
pairs.Add(new Pair<string, int>("entry2", 2));

public class Pair<T, T2>
{
    T Value1;
    T2 Value2;
     public Pair(T value1, T2 value2)
     {
         Value1 = value1;
         Value2 = value2;
     }
}

我使用了泛型,因为你没有指定什么类型(这适用于任何2种类型)。如果您对类型进行硬编码,则可以进一步简化它。

答案 8 :(得分:1)

肯定匿名类型非常适合这个:

var Pair = new { Part1 = "A", Part2 = 6 };
var PairList = (new[] { Pair }).ToList();
PairList.Add(new { Part1  = "B", Part2  = 9 });

...

List[0].Part1 = "C";

基本上这是一个包含字符串和int的新“var对象”。将它添加到数组并调用由数组上的System.Linq提供的ToList()扩展方法,以返回一个有效的List&lt;“typeof(Pair)”&gt;对象

(编辑)

或者更整洁:

var PairList2 = (new[] { new { Part1 = "A", Part2 = 6 } }).ToList();

(想法来自:http://kirillosenkov.blogspot.com/2008/01/how-to-create-generic-list-of-anonymous.html

答案 9 :(得分:0)

您可以简单地使用词典&lt;&gt;

答案 10 :(得分:0)

我会使用KeyValuePair(由Dictionary使用)或创建我自己的结构作为类型化容器,强调类型之间的关系。

当我输入这个时,有几个人发布了相同的内容 - 但我会发布此信息以保证: - )

答案 11 :(得分:0)

每个人都有一个答案(答案相同,我不想为每个人添加评论......):

我觉得使用键值组合(或字典)并不自然,因为它不代表键和值。

我正在努力避免创建自己的类来代表这对。

也许我会导入System.Web.UI ...虽然感觉很糟糕