gpt4 book ai didi

c# - LINQ 从字典中获取第一项不为空或为空

转载 作者:太空宇宙 更新时间:2023-11-03 22:30:04 25 4
gpt4 key购买 nike

我有以下词典:

    Dictionary<string, List<System.ComponentModel.DataAnnotations.ValidationResult>> resp;
resp = new Dictionary<string, List<System.ComponentModel.DataAnnotations.ValidationResult>>();

我正在尝试从 ValidationResult 获取第一个非空/空的 ErrorMessage。

我创建了以下 LINQ 表达式:

    string msg = resp.First(l => l.Value != null).Value.First(vr => vr != null && !String.IsNullOrEmpty(vr.ErrorMessage)).ErrorMessage;

但是当所有键的 validationResult 列表中的所有项目都为 null 和/或为空时,它会引发无效操作异常。当至少有一个不同于 null/empty 的验证结果时,它会很好地工作。

图片胜于千言万语,请参阅共享代码 here .

最佳答案

First() 在字典中没有匹配元素时抛出此异常。您似乎正在寻找返回 null 而不是抛出的 FirstOrDefault()

顺便说一句:你的算法有一个小缺陷:如果有一个非空列表,但它只包含 nullErrorMessages,你不会检查下一个非空列表空列表。

我建议这样查询:

string msg = resp.Where(x => x.Value != null)
.SelectMany(x => x.Value.Select(vr => vr?.ErrorMessage))
.FirstOrDefault(m => !string.IsNullOrEmpty(m));

关于c# - LINQ 从字典中获取第一项不为空或为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58338354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com