2009-11-02 52 views
14

我有這個在我的代碼空字符串:如果空

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString()) 

它給出了一個錯誤,當它返回null,我怎樣才能讓它在客戶ID是一個空字符串,如果它是空?

/M

+1

是'客戶ID'爲空值,或者是'客戶'本身爲空?另外,「CustomerID」的類型是什麼? – Thorarin 2009-11-02 09:52:50

回答

36

(更新爲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#

0
SelectList(blah, "blah", "blah", 
(cu.Customer.CustomerID!=null?cu.Customer.CustomerID.ToString():"") 
) 
16

這取決於CustomerID的類型。

如果CustomerID是一個字符串,那麼你可以使用null coalescing operator

SelectList(blah, "blah", "blah", cu.Customer.CustomerID ?? string.Empty) 

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

SelectList(blah, "blah", "blah", cu.Customer.CustomerID.ToString()) 

這將工作,因爲Nullable<T>ToString()方法如果實例爲null(技術上HasValue屬性爲false),則返回空字符串。

0

請不要在生產中使用這樣的:

/// <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); 
    } 
} 
13

三元操作符的作品,但如果你想更短的表達上任意對象,則可以使用:

(myObject ?? "").ToString() 

這裏是實從我的代碼生活的例子:

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