定义List,如List <int,string>?</int,string>

时间:2013-10-07 17:56:10

标签: c# .net

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

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

它说

  

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

8 个答案:

答案 0 :(得分:59)

根据您的需要,您可以在此处选择一些选项。

如果您不需要进行键/值查找并希望坚持使用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);

答案 1 :(得分:39)

您可以使用不可变结构

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"));

答案 2 :(得分:19)

由于您的示例使用通用List,因此我假设您不需要对数据建立索引或唯一约束。 List可能包含重复值。如果您想确保使用唯一密钥,请考虑使用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);
}

答案 3 :(得分:12)

使用C#7中的新ValueTuple(VS 2017及以上版本),有一个新的解决方案:

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

这会创建ValueTuple类型的列表。如果你的目标是.Net 4.7它是原生的,否则你必须得到ValueTuple package from nuget

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

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

这样您就可以访问mylist[0].myIntmylist[0].myString

答案 4 :(得分:5)

不确定您的具体方案,但您有三种选择:

1。)使用Dictionary&lt; ..,..&gt;
2.)围绕您的值创建一个包装类,然后您可以使用List
3.)使用元组

答案 5 :(得分:3)

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

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

您可以通过简单的方式从Ditionary中检索数据。

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

有关使用C#Dictionary ... C# Dictionary

的更多示例

导航。

答案 6 :(得分:2)

为此,您可以使用Dictionary,其中int是关键。

new Dictionary<int, string>();

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

答案 7 :(得分:1)

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