c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?

c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?,第1张

概述我过了一些问题,google搜了一下, 但我找不到答案(那满足了我). 基本上,我理解SingleOrDefault返回null或0(取决于类型). 但是我怎么能让它返回别的东西? 返回myChannels.All.Where(_Channel => _Channel.Guid == this.ParentChannelGuid).SingleOrDefault(_SPECIFICCHANNEL) 我过了一些问题,Google搜了一下,
但我找不到答案(那满足了我).

基本上,我理解SingleOrDefault返回null或0(取决于类型).

但是我怎么能让它返回别的东西?

返回myChannels.All.Where(_Channel => _Channel.GuID == this.ParentChannelGuID).SingleOrDefault(_SPECIFICCHANNEL);

所以,我想要_SPECIFICCHANNEL被返回,以防它不是单一的..
可以做到吗

解决方法 这可以用相当简单的方法来实现.如果创建自己的扩展方法比通用的SingleOrDefault更具体,那么编译器将更喜欢更多的类型特定版本.下面是一个示例,显示如何使用简单的Person类(您可以将其复制粘贴到 LINQPad中以快速查看结果):
public class Person{    public string name { get; set; }    public overrIDe string ToString()    {        return name ?? "";    }}public static class PersonExtensionMethod{    public static Person SingleOrDefault(this IEnumerable<Person> source)    {        var person = Enumerable.SingleOrDefault(source);        if (person == null)            return new Person { name = "Unnamed" };        return person;    }}public static voID Main(){    var emptyCollection = new Person[0];    var nonEmptyCollection = new Person[] { new Person { name = "Jack" } };    DeBUG.Writeline("Empty collection: " + emptyCollection.SingleOrDefault());    DeBUG.Writeline("Non-empty collection: " + nonEmptyCollection.SingleOrDefault());}

在上述示例中,SingleOrDefault(IEnumerable< Person>)优先于不太具体的SingleOrDefault T(IEnumerable T).

总结

以上是内存溢出为你收集整理的c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?全部内容,希望文章能够帮你解决c# – Linq .SingleOrDefault – 如何为自定义类设置默认值?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/1262057.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存