我需要创建List<>
对我的类。如:
List<Class1, Class2>
你会怎么做? 我不能使用“Pair”数据类型,因为它位于system.web.UI。
中你会创建一个数组列表吗? 创建两个类的结构并将它们添加到列表中?
还有另一种我不知道的方式而且我只是一个菜鸟吗?
注意: 我不希望列表以任何方式自动排序。
答案 0 :(得分:9)
我只是用这个:
var list = List<KeyValuePair<String, String>>;
或任何其他数据类型当然。这意味着您正在访问list(0).Key
和list(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 ...虽然感觉很糟糕