如何从linq选择中创建一个自动数字属性

本文关键字:一个 属性 数字 linq 选择 创建 | 更新日期: 2023-09-27 18:02:03

我想从一个字符串创建一个List<myItem>来填充myValue属性。

字符串:

"233 984 5 66 304 219 277 790"
类:

public class myItem
{
    public long ID;      // autonumeric id go here
    public long myValue; // string values go here
    public string otherProperties; //I will fill later from other source
}

我可以读取字符串,使用空格分割并解析为long[]:

 string line1 = "233 984 5 66 304 219 277 790";
 string[] words = line1.Split(' ');
 long[] myValues = Array.ConvertAll(words, s => long.Parse(s));

但不知道如何创建List<myItem>

如何从linq选择中创建一个自动数字属性

var list = 
    line1.Split(' ').
    Select((word, ix) => new myItem() { 
        ID = ix, 
        myValue = long.Parse(word) 
    }).
    ToList();

你可以这样做:

  • StringSplitOptions.RemoveEmptyEntries分割字符串,这样如果单词之间有多个空格,它们可以被忽略。
  • 使用IEnumerable<T>.Select过载支持索引
  • 项目输出到你的类
代码:

List<myItem> list = line1.Split(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries)
    .Select((r, i) => new { Index = i, Value = r })
    .Select(t => new myItem
    {
        ID = t.Index,
        myValue = long.Parse(t.Value),
    }).ToList();

我还应该补充说,上面的操作可以通过索引重载的单个Select完成,而不是使用IndexValue字段选择匿名类型,索引和值可以投影到myValues类。