53

我需要一个两列列表,例如:

List<int,string> mylist= new List<int,string>();

它说

使用泛型类型System.collection.generic.List<T>需要 1 个类型参数。

4

8 回答 8

80

根据您的需要,您有几个选择。

如果您不需要进行键/值查找并想坚持使用 a List<>,您可以使用Tuple<int, string>

List<Tuple<int, string>> mylist = new List<Tuple<int, string>>();

// add an item
mylist.Add(new Tuple<int, string>(someInt, someString));

如果您确实想要键/值查找,您可以转向Dictionary<int, string>

Dictionary<int, string> mydict = new Dictionary<int, string>();

// add an item
mydict.Add(someInt, someString);
于 2013-10-07T17:57:55.253 回答
46

您可以使用不可变结构

public struct Data
{
    public Data(int intValue, string strValue)
    {
        IntegerData = intValue;
        StringData = strValue;
    }

    public int IntegerData { get; private set; }
    public string StringData { get; private set; }
}

var list = new List<Data>();

或者一个KeyValuePair<int, string>

using Data = System.Collections.Generic.KeyValuePair<int, string>
...
var list = new List<Data>();
list.Add(new Data(12345, "56789"));
于 2013-10-07T18:00:14.233 回答
33

使用ValueTupleC# 7(VS 2017 及更高版本)的新版本,有一个新的解决方案:

List<(int,string)> mylist= new List<(int,string)>();

这会创建一个ValueTuple类型列表。如果您的目标是 .NET Framework 4.7+ 或 .NET/.NET Core,它是本机的,否则您必须从 nuget 获取 ValueTuple 包

它是一个反对的结构Tuple,它是一个类。与类相比,它还具有Tuple可以创建命名元组的优势,如下所示:

var mylist = new List<(int myInt, string myString)>();

这样你就可以访问喜欢mylist[0].myIntmylist[0].myString

于 2017-06-09T20:08:56.040 回答
21

由于您的示例使用了 generic List,我假设您不需要对数据使用索引或唯一约束。AList可能包含重复值。如果您想确保唯一的密钥,请考虑使用Dictionary<TKey, TValue>().

var list = new List<Tuple<int,string>>();

list.Add(Tuple.Create(1, "Andy"));
list.Add(Tuple.Create(1, "John"));
list.Add(Tuple.Create(3, "Sally"));

foreach (var item in list)
{
    Console.WriteLine(item.Item1.ToString());
    Console.WriteLine(item.Item2);
}
于 2013-10-07T17:58:24.097 回答
6

使用 C# Dictionary 数据结构对您有好处...

Dictionary<string, int> dict = new Dictionary<string, int>();
dict.Add("one", 1);
dict.Add("two", 2);

您可以以一种简单的方式从字典中检索数据..

foreach (KeyValuePair<string, int> pair in dict)
{
    MessageBox.Show(pair.Key.ToString ()+ "  -  "  + pair.Value.ToString () );
}

有关使用 C# 字典的更多示例... C# 字典

导航。

于 2014-03-25T05:51:40.640 回答
5

不确定您的具体情况,但您有三个选择:

1.) 使用 Dictionary<..,..>
2.) 围绕你的值创建一个包装类,然后你可以使用 List
3.) 使用 Tuple

于 2013-10-07T17:58:14.213 回答
3
List<Tuple<string, DateTime, string>> mylist = new List<Tuple<string, DateTime,string>>();
mylist.Add(new Tuple<string, DateTime, string>(Datei_Info.Dateiname, Datei_Info.Datum, Datei_Info.Größe));
for (int i = 0; i < mylist.Count; i++)
{
     Console.WriteLine(mylist[i]);
}
于 2014-04-08T06:01:22.050 回答
2

为此,您可以使用 a Dictionarywhere theint是关键。

new Dictionary<int, string>();

如果你真的想使用一个列表,它可能是一个List<Tuple<int,string>>()但是,Tuple类是只读的,所以你必须重新创建实例来修改它。

于 2013-10-07T18:00:08.177 回答