我有字符串列表
var data = new List<string> {"Name1", "Surname1", "Name2", "Surname2" };
Run Code Online (Sandbox Code Playgroud)
和描述Person的类
class Person
{
public string Name { get; set; }
public string Surname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
List<Person>从data列表创建填充的最短方法是什么结果应该等于
var persons = new List<Person>
{
new Person { Name = "Name1", Surname = "Surname1" },
new Person { Name = "Name2", Surname = "Surname2" }
};
Run Code Online (Sandbox Code Playgroud)
先感谢您!
如果你可以使用LINQ,这是一种方式:
var persons = Enumerable.Range(0, data.Count / 2)
.Select(i => new Person
{
Name = data[2 * i],
Surname = data[2 * i + 1]
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
您可以将其视为松散等效于:
var persons = new List<Person>();
for(int i = 0; i < data.Count / 2 ; i++)
{
var person = new Person
{
Name = data[2 * i],
Surname = data[2 * i + 1]
};
persons.Add(person);
}
Run Code Online (Sandbox Code Playgroud)
这是使用Zip运算符的另一个效率较低的版本(仅适用于.NET 4.0):
var names = data.Where((s, i) => i % 2 == 0);
var surnames = data.Where((s, i) => i % 2 == 1);
var persons = names.Zip(surnames,
(name, surname) => new Person
{
Name = name,
Surname = surname
})
.ToList();
Run Code Online (Sandbox Code Playgroud)
var persons = data.Batch(2)
.Select(pair => new Person
{
Name = pair.ElementAt(0),
Surname = pair.ElementAt(1)
})
.ToList();
Run Code Online (Sandbox Code Playgroud)