2011-08-04 14 views

回答

64

只需使用空合併運算符和空List的實例

public void Process(string param1, List<string> param2 = null) { 
    param2 = param2 ?? new List<String>(); 
} 

這樣做的問題是,如果「參數2」爲空並且您分配了一個新的引用,那麼它將無法在調用上下文中訪問。

+1

+1這就是我所做的,而且速度很快! –

+0

好主意。 (你錯過了創建列表的地方的「新」) – heisenberg

+0

是的,謝謝。我編輯了這篇文章。 – Vasea

-7

你用過new List<string>()不變?

+4

不是編譯時間常數。 – Domenic

2

這是不可能的。您應該使用方法重載。

public static void MyMethod(int x, List<string> y) { } 
public static void MyMethod(int x) 
{ 
    MyMethod(x, Enumerable<string>.Empty()); 
} 
+0

這不是不可能的:http://msdn.microsoft.com/en-us/library/dd264739.aspx –

+1

不可能將非編譯時間常量(如空列表)作爲默認值。我知道你可以在C#中使用參數的默認值,很明顯...... – Domenic

+1

但是,這將是唯一的解決方案或任何使用4.0之前的C#版本的人。 – shmeeps

2
private void test(List<string> optional = null) 
    { 

    } 

遺憾的字符串,而不是名單。 空工作正常,我就4.0,我使用Visual Studio 2010

+0

這是'string',而不是'List ' – Domenic

+0

修正了它,並編譯。 – Drake

+0

它編譯,但你在運行時得到對象實例化異常 –

5

您也可以執行以下操作使用default這是一個編譯時間常數(nullList<T>的情況下):

void DoSomething(List<string> lst = default(List<string>)) 
{ 
    if (lst == default(List<string>)) lst = new List<string>(); 
} 
+0

我的情況最好的解決方案! – MozzieMD