我有字符串列表
var data = new List<string> {"Name1", "Surname1", "Name2", "Surname2" };
和描述Person的类
class Person
{
public string Name { get; set; }
public string Surname { get; set; }
}
创建List<Person>
的最短路径是什么?从 data
填充列表
结果应该等于
var persons = new List<Person>
{
new Person { Name = "Name1", Surname = "Surname1" },
new Person { Name = "Name2", Surname = "Surname2" }
};
提前致谢!
最佳答案
如果您可以使用 LINQ,这里有一种方法:
var persons = Enumerable.Range(0, data.Count / 2)
.Select(i => new Person
{
Name = data[2 * i],
Surname = data[2 * i + 1]
})
.ToList();
您可以将其大致等同于:
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);
}
这是另一个效率较低的版本(仅适用于 .NET 4.0),它使用 Zip
operator :
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();
您还可以使用 Batch
operator来自 MoreLinq这里:
var persons = data.Batch(2)
.Select(pair => new Person
{
Name = pair.ElementAt(0),
Surname = pair.ElementAt(1)
})
.ToList();
关于c# - 从顺序数据填充属性时创建类实例的最短方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4267321/