Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用linq从字符串中提取对象列表_C#_Linq - Fatal编程技术网

C# 使用linq从字符串中提取对象列表

C# 使用linq从字符串中提取对象列表,c#,linq,C#,Linq,我是linq的新手。我有一个字符串,格式如下 code:description;code2:description2;code3:description3... etc. 记录用分隔字符,每条记录有两个字段,用:字符分隔 我正在编写一个linq查询来提取一个包含字段代码和描述的对象列表。 我写了下面的查询,它似乎产生了正确的结果,但我想知道是否有更好或更正确的方法来实现它 var objects = from objString in recsString.Split(';')

我是linq的新手。我有一个字符串,格式如下

code:description;code2:description2;code3:description3... etc.
记录用
分隔字符,每条记录有两个字段,用
字符分隔

我正在编写一个linq查询来提取一个包含字段代码和描述的对象列表。 我写了下面的查询,它似乎产生了正确的结果,但我想知道是否有更好或更正确的方法来实现它

var objects =
    from objString in recsString.Split(';')
    let obj = objString.Split(':')
    select new {
        Code = obj[0].Trim(),
        Description = obj[1].Trim()
    };

这很好,但我唯一能观察到的是,您可以使用以下命令删除空条目:

如果您认为可能丢失了信息,您也可以格外安全地检查结果:

var objects =
from objString in recsString.Split(';', StringSplitOptions.RemoveEmptyEntries)
let obj = objString.Split(':', StringSplitOptions.RemoveEmptyEntries)
select new {
    Code = obj.Any() ? obj[0].Trim() : string.Empty,
    Description = obj.Count > 1 ? obj[1].Trim() : string.Empty
};

您所做的一切都很好,下面是使用lambdas编写的方法:

string objString = "code:description;code2:description2;code3:description3";

Dictionary<string, string> results =
    objString.Split(';')
             .Select(x => x.Split(':'))
             .ToDictionary(key => key[0], value => value[1]);

// And now you have a nice little dictionary
foreach (var r in results)
    Console.WriteLine("{0}:{1}",r.Key, r.Value);

是否将“对象”定义为项目中自己的类。如果是这样,您可以在select语句中调用构造函数。IE—选择新记录(代码、说明);不,它是匿名的,如果我认为我需要它,我会创建一个类,但现在已经足够了。如果您有
,这将不起作用,或者如果任何条目为空或半空。“除此之外,一切都很好。”戴维斯说。幸运的是没有这种情况。那么好吧!谢谢你的额外推荐。很好的方法。对象列表现在更适合我的需要。当然,我认为另一个潜在客户可能会有用:)
string objString = "code:description;code2:description2;code3:description3";

Dictionary<string, string> results =
    objString.Split(';')
             .Select(x => x.Split(':'))
             .ToDictionary(key => key[0], value => value[1]);

// And now you have a nice little dictionary
foreach (var r in results)
    Console.WriteLine("{0}:{1}",r.Key, r.Value);
    var results = objString.Split(';')
                           .Select(x => x.Split(':'))
                           .Select(x => new {Code = x[0], Description = x[1]});

    foreach (var r in results)
        Console.WriteLine("{0}:{1}",r.Code, r.Description);