c# - 将 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"
我们可以为非空情况做类似的事情吗
解决方案
我认为最接近 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);
推荐阅读
- css - 如何在 CSS 中指定带有特殊字符的字体
- c - 将 4 个整数的结构转换为浮点数
- javascript - 页面加载中的 JavaScript 删除空表行
- gradle - 摇篮。调用 getProjectDir() 不会返回预期的目录
- python - 资产的时间序列图 - 根据另一个矩阵更改透明度
- eclipse - 电脑突然重启后,eclipse 无法启动并发出:VM 终止。退出代码=1
- jquery - 剑道分离器方向
- c# - 实体框架自定义 HistoryContext 导致迁移表被重新创建并失败
- angular - 在 n2-smart-table 中使用掩码过滤
- powershell - Powershell:MaskedTextBox 获取文本