加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-15 04:06:57 所属栏目:百科 来源:网络整理
导读:我过了一些问题,google搜了一下, 但我找不到答案(那满足了我). 基本上,我理解SingleOrDefault返回null或0(取决于类型). 但是我怎么能让它返回别的东西? 返回myChannels.All.Where(_Channel = _Channel.Guid == this.ParentChannelGuid).SingleOrDefault(_SP
我过了一些问题,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).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读