如何解决在新的linq对象中处理null返回值C#
我要做什么?我需要将新创建的对象发布到数据库,传入的对象可能具有空值。根据需要将创建的对象设置为#nullible true
。
当数据进入并且我在对象的空字符串上着陆时,我得到了空引用并着陆。
我的代码:
Objects.Data.Info.StoredData postData = new Objects.Data.Info.StoredData
{
Name = data.data.Name,Type = data.data.Type,Price = data.data.Price,Indicator = data.data.Indicator,Scan = data.data.Scan,Comment = data.data.Extra
};
db.Information.Add(postData);
db.SaveChanges();
data.data.Extra有时可以为null。
我通常会写if语句来解决这个问题,但是我觉得这不是最佳实践。我应该去哪个方向?我检查了其他一些问题和msdn,找不到清晰的路径。
谢谢。
解决方法
当属性为null时,您可以使用??
运算符来简洁地默认为空字符串,如下所示:
Comment = data.data.Extra ?? ""
//the value on the right is used if the expression on the left is null
??
被称为'null-coalescing'运算符:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator
如果您还想处理中间属性为null(我认为这种情况不适用于这种情况,但很高兴知道),并且仍然希望默认为空字符串,则可以将此与Eugene的建议结合使用像这样使用?.
:
Comment = data?.data?.Extra ?? ""
,
您应使用Null条件运算符(?.
),如下所示:
data?.data?.Name
如果NullReferenceException
或data
为data.data
,这将阻止null
。
var postData = new Objects.Data.Info.StoredData
{
Name = data.data.Name,Type = data.data.Type,Price = data.data?.Price,Indicator = data.data.Indicator,Scan = data.data.Scan,Comment = data.data.Extra
};
db.Entry(postData).State=EntityState.Added;
db.SaveChanges();
我认为您在使用Price属性时遇到了困难,因为一旦您的数据库中的游标失败,该属性在数据库中就不会为null,因此一旦您完全按照我的意愿进行操作,最终您就可以更改此nullable,然后轻松检查或在运行时插入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。