gpt4 book ai didi

c# - 为什么这个 defaultIfEmpty 选择 ienumerable 而不是字符串?

转载 作者:太空宇宙 更新时间:2023-11-03 20:38:55 24 4
gpt4 key购买 nike

 from a in mainDoc.XPathSelectElements("//AssembliesMetrics/Assembly/@Assembly")
let aVal=a.Value
where aVal.IsNullOrEmpty( )==false&&aVal.Contains(" ")
select aVal.Substring(0, aVal.IndexOf(' '))
into aName
let interestedModules=new[ ] { "Core", "Credit", "Limits", "Overdraft" }
where aName.Contains(".")
let module=
interestedModules
.FirstOrDefault(x => aName
.StartsWith(x, StringComparison.InvariantCultureIgnoreCase))
where module!=null
group aName by module.DefaultIfEmpty() // ienumerable<char>, why?
into groups
select new { Module=groups.Key??"Other", Count=groups.Count( ) };

最佳答案

module是一个字符串。

字符串实现 IEnumerable<char> .

您正在调用 Enumerable.DefaultIfEmpty方法,它扩展了 IEnumerable<T> .
此方法永远不会返回除 IEnumerable<T> 以外的任何内容。 .

编辑:如果你想替换 null module 的值对于非空值,您可以使用空合并运算符:

group aName by module ?? "SomeValue"

然而,module实际上永远不会是null , 因为 where module!=null子句。
然后您还应该删除 ??"Other"来自决赛select条款。

关于c# - 为什么这个 defaultIfEmpty 选择 ienumerable<char> 而不是字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3891374/

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