使用内联定义<T>初始化List <T>

Pra*_*pta 5 c#

你总是可以定义一个这样的类:

public class item {
  int id;
  string name;
}
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它:

List<item> items = new List<item>();
Run Code Online (Sandbox Code Playgroud)

我们不能做这样的事情:

var items = new List<{int id, string name}>();
Run Code Online (Sandbox Code Playgroud)

只是在底层对象定义简单且可预测时初始化的一种简短方法.

这在JavaScript中是可能的(我已经看过Angular中的例子).

很抱歉,如果之前得到了解答,我的快速搜索无法在Google或SO上找到此特定主题的答案.

can*_*on7 11

C#7引入了元组,所以你可以这样做:

var list = new List<(int id, string name)>();
list.Add((3, "Bob"));

var (id, name) = list[0];

var entry = list[0];
string s = $"{entry.name} has ID {entry.id}";

foreach (var (id, name) in list)
{

}
Run Code Online (Sandbox Code Playgroud)

在C#7之前,您可以使用旧Tuple类型,这有点混乱:

var list = new List<Tuple<int, string>>();
list.Add(Tuple.Create(3, "Bob"));

foreach (var item in list)
{
    int id = item.Item1;
    string name = item.Item2;
}
Run Code Online (Sandbox Code Playgroud)

  • 是的,旧的元组很烂。我非常讨厌`.Item1`,我从未用过它们:-) +1比我快:-) (3认同)

Zoh*_*led 7

在c#7.0及更高版本中,您可以使用值元组 - 语法几乎相同:

var items = new List<(int id, string name)>();
Run Code Online (Sandbox Code Playgroud)


SᴇM*_*SᴇM 7

你也可以这样做:

var list = new[] { new { Id = 1, Name = "name" } }.ToList();

list.Add(new { Id = 2, Name = "name2" });

foreach (var item in list)
{
    int id = item.Id;
    string name = item.Name;
}
Run Code Online (Sandbox Code Playgroud)

参考:匿名类型,隐式类型数组,ToList扩展方法