空字符串,如果为null

Las*_*vik 21 c# asp.net-mvc

我的代码中有这个:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
Run Code Online (Sandbox Code Playgroud)

当它返回null时它会给出一个错误,如果它为null,我怎么能使它成为一个空字符串?

/ M

Gro*_*roo 54

(C#6.0更新)

如果您使用的是C#6或更新版本(Visual Studio 2015或更高版本),则可以使用null-conditional运算符?.实现此目的:

var customerId = cu.Customer?.CustomerId.ToString() ?? "";
Run Code Online (Sandbox Code Playgroud)

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() ?? "";
Run Code Online (Sandbox Code Playgroud)

对于6.0之前的C#版本(VS2013或更早版本),您可以将其合并为:

string customerId = cu.Customer != null ? cu.Customer.CustomerID.ToString() : "";
Run Code Online (Sandbox Code Playgroud)

在尝试访问其成员之前,只需检查对象是否为非null,否则返回空字符串.

除此之外,还存在空对象模式有用的情况.这意味着您确保您Customer的父类(cu在这种情况下的类型)始终返回对象的实际实例,即使它是"空".如果您认为它可能适用于您的问题,请查看此链接以获取示例:如何在C#中创建Null对象.


DKr*_*oot 18

(C#2.0 - C#5.0)

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

(myObject ?? "").ToString()
Run Code Online (Sandbox Code Playgroud)

以下是我的代码中的真实示例:

 private HtmlTableCell CreateTableCell(object cellContents)
 {
     return new HtmlTableCell()
     {
         InnerText = (cellContents ?? "").ToString()             
     };
 }
Run Code Online (Sandbox Code Playgroud)

  • 该代码的结果之一是多余的“”“ .ToString()`,此外,'(myObject ??”“”)仅在`myObject`首先是字符串时才起作用,从而使`.ToString()`起作用。甚至没有必要。我想你是说`myObject?.ToString()?“”`。 (2认同)
  • @ensisNoctis 1.这是在我们有C#5时编写的,而C#5没有`?.`运算符。对于C#6+,我将使用`?.`。2.`.ToString()`可以在对象上正常工作。我支持范围仅限于C#2-C#5的答案:更新以明确说明。 (2认同)

adr*_*nks 16

这取决于的类型CustomerID.

如果CustomerID是字符串,那么您可以使用null合并运算符:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID ?? string.Empty)
Run Code Online (Sandbox Code Playgroud)

如果CustomerIDNullable<T>,那么你可以使用:

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
Run Code Online (Sandbox Code Playgroud)

这将起作用,因为如果实例是(在技术上,如果HasValue属性是)ToString(),则Nullable<T>返回空字符串的方法.nullfalse