首页 > 解决方案 > 将 c# NULL 合并运算符与 NOT NULL 场景一起使用

问题描述

我正在使用 LINQ 填充一个类,而 LinkUrl 是我的类的字符串属性。只有当属性不为 null 时,我才需要设置一个值,否则不需要分配任何值 目前使用条件运算符 ?:

    var formattedData = dataset.Select(p => new  ListModel
    {
        Prop1=....,
        Prop2=....,
        ...
        LinkUrl = string.IsNullOrWhiteSpace(p.LabelUrl) ? "" : "SET MY PROPERRTY TO A VALUE",
        .....
    }).ToList();

我们可以用 C# 的空合并运算符 (??) 或 (?.) 或类似的东西替换它吗?

目的是避免在很多地方重复使用assigning to ""

我可以用运算符写它??,但只处理 NULL 的情况,如下所示。

    LinkUrl = p.LabelUrl ?? "SET MY PROPERRTY TO A VALUE" 
    

我们可以为非空情况做类似的事情吗

标签: c#null-coalescing-operatornull-coalescing

解决方案


我认为最接近 not null 的简写是一组扩展方法

    public static T NullOrValue<T>(this T nullable, T value) where T : class => nullable == null ? null : value;
    
    public static T? NullOrValue<T>(this T? nullable, T value) where T : struct => nullable == null ? (T?)null : value;

然后可以在任何可为空的对象上使用

var value = anyObjectOrNullable.NullOrValue(MyValue);

推荐阅读