C# 如果为空,则为空字符串

C# 如果为空,则为空字符串,c#,asp.net-mvc,C#,Asp.net Mvc,我的代码中有: SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString()) 当它返回null时会出现错误,如果CustomerID为null,如何使它成为空字符串 /M(针对C#6.0的更新) 如果您使用的是C#6或更高版本(Visual Studio 2015或更高版本),则可以通过以下方式实现: null条件运算符的一个有用属性是,如果要测试多个嵌套属性是否为null,还可以将其“链接”: // ensure (a

我的代码中有:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
当它返回null时会出现错误,如果CustomerID为null,如何使它成为空字符串

/M

(针对C#6.0的更新)

如果您使用的是C#6或更高版本(Visual Studio 2015或更高版本),则可以通过以下方式实现:

null条件运算符的一个有用属性是,如果要测试多个嵌套属性是否为null,还可以将其“链接”:

// ensure (a != null) && (b != null) && (c != null) before invoking
// a.b.c.CustomerId, otherwise return "" (short circuited at first encountered null)
var customerId = a?.b?.c?.CustomerId.ToString() ?? "";
对于6.0(VS2013或更高版本)之前的C#版本,您可以这样合并它:

string customerId = cu.Customer != null ? cu.Customer.CustomerID.ToString() : "";
在尝试访问其成员之前,只需检查对象是否为非null,否则返回空字符串


除此之外,还有一些情况下模式是有用的。这意味着您要确保
客户的父类(在本例中为
cu
类型)始终返回对象的实际实例,即使它是“空的”。如果您认为此链接可能适用于您的问题,请查看此链接以获取示例:。

它取决于
客户ID的类型

如果
CustomerID
是字符串,则可以使用:

如果
CustomerID
是,则可以使用:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
(myObject ?? "").ToString()
这将起作用,因为如果实例为
null
(从技术上讲,如果属性为
false
),则
null
方法返回空字符串。

(C#2.0-C#5.0)

三元运算符可以工作,但如果您想在任意对象上使用更短的表达式,可以使用:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
(myObject ?? "").ToString()
下面是我的代码中的真实示例:

 private HtmlTableCell CreateTableCell(object cellContents)
 {
     return new HtmlTableCell()
     {
         InnerText = (cellContents ?? "").ToString()             
     };
 }

CustomerID
是空值,还是
Customer
本身是空值?另外,
CustomerID
的类型是什么?此代码的结果之一是冗余的
”。ToString()
,而且
(myObject??)
仅当
myObject
首先是字符串时才起作用,这使得
.ToString()
更加不必要。我想你的意思是
myObject?.ToString()??“”
@ensisNoctis 1。这是在我们有C#5的时候写的,它没有
?。
操作符。对于C#6+,我会使用
?。
。2.
.ToString()
可以很好地处理对象。我坚持我的答案,范围是C#2-C#5:更新以澄清。我同意:)
 private HtmlTableCell CreateTableCell(object cellContents)
 {
     return new HtmlTableCell()
     {
         InnerText = (cellContents ?? "").ToString()             
     };
 }