如何构建列表

时间:2017-12-02 15:14:16

标签: c# list

如何构建具有两个维度的列表?

我试过这个像python

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

和这个

tree | grep ajax

没有运气。

5 个答案:

答案 0 :(得分:6)

您需要指定元组项类型:

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

或者你可以使用一个类(允许你命名属性):

class Data
{
    public int Prop1 { get; set; }
    public string OtherProp { get; set; }
}

var lst = new List<Data>();

或者,如果您使用的是C#7并安装了System.ValueTuple软件包,则可以使用新的元组语法:

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

或姓名:

var lst = new List<(string name, int id)>();
// Adding
lst.Add(("test", 1));
lst.Add((name: "test", id: 1));
// Member access 
var name = lst[0].name;
// Destructuring 
var (name, id) = lst[0];

C#7语法是其中较好的一种,但可能并非在所有上下文中都可用。

答案 1 :(得分:1)

您可以使用List<Tuple<string, int>>;

var example = new List<Tuple<string, int>>
{
    Tuple.Create("", 0),
    Tuple.Create("Some other element", 60)
};

答案 2 :(得分:1)

您可以使用List<Tuple<string,int>>

var twoDimensionsList = new List<Tuple<string,int>>
{
    new Tuple<string,int>("something", 0),
    new Tuple<string,int>("something else", 1),
}

答案 3 :(得分:0)

试试这个;

        var list = new List<TupleType>
        {
                new TupleType
                {
                    Key = 1,
                    Value = "Sample"
                }
        };
        //list[0].Key
        //list[0].Value

TupleType class;

public class TupleType
{
    public int Key { get; set; }

    public string Value { get; set; }
}

答案 4 :(得分:0)

我真的不喜欢其他用户提出的Tuple<String, Int32>解决方案:

List<Tuple<String, Int32>> myList = new List<Tuple<String, Int32>>
{
    Tuple.Create("A", 1),
    Tuple.Create("B", 2)
};

这就是我实现您的要求的方式,这是我首选的方法:

public class MyClass
{
    public Int32 MyProperty1 { get; set; }
    public String MyProperty2 { get; set; }
}

List<MyClass> myList = new List<MyClass>();

元组非常适合internal usage。只要您可以控制和维护它们的使用环境并且您对它们的结构和参数有充分的了解,它们就可以了。不幸的是,在public API上,由于缺乏命名,它们的效果较差:它们会迫使消费者猜测他们的行为或查找文档。

修改

C# 7中,您现在可以将它们与命名属性一起使用,因此它们成为一个不错的选择。