我有這個在我的代碼空字符串:如果空
SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
它給出了一個錯誤,當它返回null,我怎樣才能讓它在客戶ID是一個空字符串,如果它是空?
/M
我有這個在我的代碼空字符串:如果空
SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString())
它給出了一個錯誤,當它返回null,我怎樣才能讓它在客戶ID是一個空字符串,如果它是空?
/M
(更新爲C#6.0)
如果您正在使用C#6或更高版本(Visual Studio的2015年或更高版本),那麼你可以使用null-conditional operator ?.
實現這一點:
var customerId = cu.Customer?.CustomerId.ToString() ?? "";
空條件運算符的一個有用屬性是,如果要測試幾個嵌套屬性是否爲空,它也可以是「鏈接的」:
// 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() : "";
簡單的檢查對象非空您嘗試訪問它的成員之前, ,否則返回一個空字符串。
除此之外,有些情況下null object模式是有用的。這意味着你確保你的Customer
的父類(在這種情況下是cu
的類型)總是返回一個對象的實際實例,即使它是「空的」。如果您認爲這可能適用於您的問題,請查看此鏈接的示例:How do I create a Null Object in C#。
SelectList(blah, "blah", "blah",
(cu.Customer.CustomerID!=null?cu.Customer.CustomerID.ToString():"")
)
這取決於CustomerID
的類型。
如果CustomerID
是一個字符串,那麼你可以使用null coalescing operator:
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
),則返回空字符串。
請不要在生產中使用這樣的:
/// <summary>
/// I most certainly don't recommend using this in production but when one can abuse delegates, one should :)
/// </summary>
public static class DirtyHelpers
{
public static TVal SafeGet<THolder, TVal>(this THolder holder, Func<TVal> extract) where THolder : class
{
return null == holder ? default(TVal) : extract();
}
public static void Sample(String name)
{
int len = name.SafeGet(()=> name.Length);
}
}
三元操作符的作品,但如果你想更短的表達上任意對象,則可以使用:
(myObject ?? "").ToString()
這裏是實從我的代碼生活的例子:
private HtmlTableCell CreateTableCell(object cellContents)
{
return new HtmlTableCell()
{
InnerText = (cellContents ?? "").ToString()
};
}
是'客戶ID'爲空值,或者是'客戶'本身爲空?另外,「CustomerID」的類型是什麼? – Thorarin 2009-11-02 09:52:50