给定上下文中的条件Null运算符无效类型

时间:2019-03-10 19:19:09

标签: c# asp.net null

使用旧版应用程序,ASP.Net,c#。 尝试将我的log4net消息附加到SessionWrapper.UserDisplayName

麻烦之处在于,如果未定义sessionwrapper,我不希望它被炸毁,我只希望它将其视为null或空,而我正努力避免编写多行代码。

以此为基础的想法:

    banana = null;
    string result2 = banana?.prop1 + "something new";

结果2 =新事物

将该概念应用于我的代码:

SessionWrapper?.UserDisplayName + "error message"

我得到一个错误编译说: “ SessionWrapper是一种类型,在当前上下文中是无效的”

任何见解都会受到赞赏-

1 个答案:

答案 0 :(得分:1)

类型不是值,因此永远不会null。如果UserDisplayName是此类型的静态属性,则它可能为null;否则,它可能为null。但是,可以将null与字符串连接起来。 null将被视为空字符串。

简单地写

string result = SessionWrapper.UserDisplayName + "error message";

banana?.prop1中,空条件运算符仅在banananull时才有用。该表达式等效于banana == null ? (string)null : banana.prop1

如果要处理prop1可能为null的情况,请使用null-coalescing运算符??

string result2 = (banana.prop1 ?? "<empty>") + "something new";

您当然可以将两者结合在一起。

string result2 = (banana?.prop1 ?? "<empty>") + "something new";

现在,bananaprop1都可以为空。在这两种情况下,您都将得到结果"<empty>something new"