代码之家  ›  专栏  ›  技术社区  ›  Faruz

在.NET中创建对列表

  •  2
  • Faruz  · 技术社区  · 15 年前

    我需要创建一个 List<> 我的两个班级。例如: List<Class1, Class2>

    你会怎么做? 我不能使用“pair”数据类型,因为它在system.web.ui中。

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

    有没有别的方法我不知道,我只是个笨蛋?

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

    12 回复  |  直到 15 年前
        1
  •  3
  •   PhilPursglove    15 年前

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

        2
  •  9
  •   Pondidum    15 年前

    我只是用这个:

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

    或者其他数据类型。这意味着你可以像 list(0).Key list(0).Value 但这并不困扰我,除非我将名单对外公开。

        3
  •  8
  •   Martin Liversage    15 年前

    只需创建自己的配对类:

    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)有元组,这是解决这个问题的一个更通用的方法。

        4
  •  2
  •   Mark Seemann    15 年前

    正如HansKesting指出的那样,您可以创建自己的Pair类,但通常这样的构造会掩盖这样一个事实:您试图配对的两种类型之间的关系实际上代表了API中一个更强大的概念。

    因此,如果您显式地将对作为具有良好命名的强概念键入,那么您的代码可能更易于阅读,而不是以通用对(或元组)结尾。

        5
  •  1
  •   Hans Kesting    15 年前

    你可以创建你自己的配对类…

        6
  •  1
  •   Matthew Steeples    15 年前

    它被设计用于字典中,但您可以使用 KeyValuePair

        7
  •  1
  •   Lee Hesselden    15 年前

    是否可以使用通用词典而不是通用列表?

        8
  •  1
  •   naspinski    15 年前

    我同意使用字典,除非您可以有与字典要求的唯一值相同的多个值 钥匙 价值观。

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

    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;
         }
    }
    

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

        9
  •  1
  •   Rich    15 年前

    当然,匿名类型非常适合:

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

    基本上,这将生成一个新的“var对象”,其中包含一个字符串和一个int。将其添加到数组中,并调用数组上System.Linq提供的toList()扩展方法,以返回一个有效列出<“typeof(pair)”>对象的对象。

    (编辑)

    或更干净:

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

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

        10
  •  0
  •   Tim Ebenezer    15 年前

    您可以简单地使用字典<gt;

        11
  •  0
  •   philsquared    15 年前

    我要么使用keyValuePair(字典使用的),要么创建自己的结构作为类型化容器,强调类型之间的关系。

    当我输入这些内容时,有几个人已经发布了很多相同的内容——但我还是会发布这些内容以确保安全——)

        12
  •  0
  •   Faruz    15 年前

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

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

    我试图避免创建自己的类来表示这对。

    也许我会导入system.web.ui…但是感觉很糟糕

    推荐文章