c# - 从顺序数据填充属性时创建类实例的最短方法

标签 c# instantiation

我有字符串列表

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),它使用 Zipoperator :

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();

您还可以使用 Batchoperator来自 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/

相关文章:

c# - 根据使用的构造函数有选择地公开方法?

c# - 如何使用 IEnumerable 实现进度?

c++ - 停止增加的无限递归模板实例化,这是不需要的

java - 类未实例化,无法使用 ActionListener 工作,单独工作正常

PHP:如何使用另一个类中的参数实例化一个类

c# - 如果已启动的进程处于打开状态,应用程序退出后套接字不会关闭

c# - Observable.Interval 等待 Action 完成

c# - 使用 OracleConnection.Open() 时出错 ORA-00303 : Network Library: Name-Value syntax error ODP. NET managed dll

unity-game-engine - 如何在Unity中引用实例化对象?

java - 如何根据标识符实例化某个子类,或者有更好的方法吗?