2011-08-04 15 views

Respuesta

64

Sólo tiene que utilizar el operador coalescente nula y una instancia de lista vacía

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

El problema con esto es que si "param2" es nulo y asigna una nueva referencia, entonces no sería accesible en el contexto de llamada.

+1

+1 ¡eso es lo que hago y es rápido! –

+0

Buena idea. (te estás perdiendo el "nuevo" de donde creas la lista) – heisenberg

+0

sí, gracias. Edité la publicación. – Vasea

-7

¿Ha utilizado new List<string>()?

+4

No es una constante en tiempo de compilación. – Domenic

2

Es imposible. Deberías usar sobrecarga de método en su lugar.

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

No es imposible: http://msdn.microsoft.com/en-us/library/dd264739.aspx –

+1

Es imposible tener una constante de tiempo de no compilación, como una lista vacía, como el valor predeterminado. Sé que puede usar valores predeterminados para parámetros en C#, obviamente ... – Domenic

+1

Sin embargo, esta sería la única solución o cualquiera que utilice una versión de C# antes de 4.0. – shmeeps

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

    } 

lo de la cadena en lugar de la lista. Null funciona bien para mí en 4.0, estoy utilizando Visual Studio 2010

+0

Eso es 'string', no' List ' – Domenic

+0

Se corrigió y se compila. – Drake

+0

Compila, pero obtiene la excepción Ejemplificación de objeto en tiempo de ejecución –

5

Es posible que también los siguientes pasos utilizando default que es una compilación constante de tiempo (null en el caso de un List<T>):

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

¡La mejor solución en mi caso! – MozzieMD

Cuestiones relacionadas