我的代码中有这个:
SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
当返回null时,会出现错误,我该如何使CustomerID成为空字符串呢?
/M
我的代码中有这个:
SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
当返回null时,会出现错误,我该如何使CustomerID成为空字符串呢?
/M
(C# 6.0更新)
如果你使用的是C# 6或更高版本(Visual Studio 2015或更高版本),那么你可以使用空值传播运算符?.
来实现这一功能:
var customerId = cu.Customer?.CustomerId.ToString() ?? "";
空值条件运算符的一个有用特性是,如果您想测试多个嵌套属性是否为 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() ?? "";
对于C# 6.0之前的版本(VS2013或更早版本),可以使用以下方式进行合并:
string customerId = cu.Customer != null ? cu.Customer.CustomerID.ToString() : "";
在尝试访问对象成员之前,只需检查该对象是否非空,否则返回空字符串。
除此之外,在某些情况下,空对象模式很有用。这意味着您确保您的 Customer
的父类(在本例中为 cu
的类型)始终返回一个实际的对象实例,即使它是“空”的。如果您认为它可能适用于您的问题,请查看此链接以获取示例:如何在C#中创建空对象。
(C# 2.0 - C# 5.0)
条件运算符可以使用,但如果你想要更短的表达式来处理任意对象,可以使用:
(myObject ?? "").ToString()
这里是来自我的代码的真实例子:
private HtmlTableCell CreateTableCell(object cellContents)
{
return new HtmlTableCell()
{
InnerText = (cellContents ?? "").ToString()
};
}
"".ToString()
,此外 (myObject ?? "")
只有在 myObject
一开始就是字符串时才能工作,使 .ToString()
更加不必要。我认为你的意思是 myObject?.ToString() ?? ""
。 - Robert Synoradzki?.
运算符。对于 C# 6+,我会使用 ?.
。2. .ToString()
在对象上可以正常工作。我坚持我的答案适用于 C# 2 - C# 5:已更新以澄清。 - Dima Korobskiy这取决于CustomerID
的类型。
如果CustomerID
是一个字符串,则可以使用空值合并运算符:
SelectList(blah, "blah", "blah", cu.Customer.CustomerID ?? string.Empty)
如果 CustomerID
是一个 Nullable<T>
,那么你可以使用:
SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
这将起作用是因为Nullable<T>
的ToString()
方法会在实例为 null
(技术上是HasValue属性为false
)时返回一个空字符串。
SelectList(blah, "blah", "blah",
(cu.Customer.CustomerID!=null?cu.Customer.CustomerID.ToString():"")
)
CustomerID
是空值,还是Customer
本身为空?此外,CustomerID
的类型是什么? - Thorarin