C# 如何创建ValueTuple列表?
是否可以在C#7中创建ValueTuple列表 像这样:C# 如何创建ValueTuple列表?,c#,c#-7.0,valuetuple,C#,C# 7.0,Valuetuple,是否可以在C#7中创建ValueTuple列表 像这样: List<(int example, string descrpt)> Method() { return Something; } List<(int, string)> list = new List<(int, string)>(); list.Add((3, "first")); list.Add((6, "second")); List方法() { 归还某物; } 此语法最适用于c
List<(int example, string descrpt)> Method()
{
return Something;
}
List<(int, string)> list = new List<(int, string)>();
list.Add((3, "first"));
list.Add((6, "second"));
List方法()
{
归还某物;
}
此语法最适用于c#6
,但也可用于c#7
。其他答案更加正确,因为他们倾向于使用ValueTuple
而不是这里使用的Tuple
。您可以看到ValueTuple
List<Tuple<int, string>> Method()
{
return new List<Tuple<int, string>>
{
new Tuple<int, string>(2, "abc"),
new Tuple<int, string>(2, "abce"),
new Tuple<int, string>(2, "abcd"),
};
}
List<(int, string)> Method()
{
return new List<(int, string)>
{
(2, "abc"),
(2, "abce"),
(2, "abcd"),
};
}
List方法()
{
返回新列表
{
新元组(2,“abc”),
新元组(2,“abce”),
新元组(2,“abcd”),
};
}
列表方法()
{
返回新列表
{
(2,“abc”),
(2,“abce”),
(2,“abcd”),
};
}
当然,您可以这样做:
List<(int example, string descrpt)> Method() => new List<(int, string)> { (2, "x") };
var data = Method();
Console.WriteLine(data.First().example);
Console.WriteLine(data.First().descrpt);
List-Method()=>新列表{(2,x”)};
var数据=方法();
Console.WriteLine(data.First().example);
Console.WriteLine(data.First().descrpt);
您正在寻找这样的语法:
List<(int example, string descrpt)> Method()
{
return Something;
}
List<(int, string)> list = new List<(int, string)>();
list.Add((3, "first"));
list.Add((6, "second"));
List List=新列表();
添加((3,“第一”);
增加((6,“第二”);
在您的案例中,您可以这样使用:
List<(int, string)> Method() =>
new List<(int, string)>
{
(3, "first"),
(6, "second")
};
List方法()=>
新名单
{
(3,“第一”),
(6,“第二”)
};
还可以在返回之前命名这些值:
List<(int Foo, string Bar)> Method() =>
...
List方法()=>
...
您可以在(重新)命名时接收这些值:
List<(int MyInteger, string MyString)> result = Method();
var firstTuple = result.First();
int i = firstTuple.MyInteger;
string s = firstTuple.MyString;
List result=Method();
var firstTuple=result.First();
int i=firstTuple.MyInteger;
字符串s=firstTuple.MyString;
仅添加到现有答案中,关于从现有枚举中投影值元组
,以及关于属性命名:
通过在元组创建中提供属性的名称,您仍然可以命名元组属性并使用var
类型推断(即不重复属性名称),即
var list = Enumerable.Range(0, 10)
.Select(i => (example: i, descrpt: $"{i}"))
.ToList();
// Access each item.example and item.descrpt
类似地,从方法返回元组的枚举时,可以在方法签名中命名属性,然后不需要在方法中再次命名它们:
public IList<(int example, string descrpt)> ReturnTuples()
{
return Enumerable.Range(0, 10)
.Select(i => (i, $"{i}"))
.ToList();
}
var list = ReturnTuples();
// Again, access each item.example and item.descrpt
public IList ReturnTuples()
{
返回可枚举范围(0,10)
.Select(i=>(i,$“{i}”))
.ToList();
}
var list=ReturnTuples();
//再次访问每个item.example和item.descrpt
为什么不试试呢?我几乎想投否决票,因为这是返回命名元组列表所需的语法。为什么会有这个问题?我想问题不是关于方法的返回类型,而是关于缺少的东西。相关帖子-根本不需要使用“Tuple”,我当然更喜欢这个sintax,它比其他的更可读、更清晰。这是C#6及以下版本的正确语法。由于此答案使用的是Tuple
,而不是ValueTuple
,因此被否决。就内存使用和性能而言,Tuple和ValueTuple之间存在显著差异。当人们问起C#7和元组时,他们不是指旧元组。元组是在堆上创建的,需要进行垃圾收集。在堆栈上创建ValueTuple。最好在方法定义中命名字段。