2010-08-04 22 views
12

Aquí es mi método:C# 4.0 Parámetros opcionales: cómo especificar el parámetro opcional del tipo "Guid"?

public void SomeQuery(string email = "", Guid userId = Guid.Empty) 
{ 
    // do some query 
} 

userId me da un error, ya que debe ser una constante en tiempo de compilación, que entiendo. Pero incluso cuando me declaro una constante:

private const emptyGuid = Guid.Empty; 

continuación, cambie la firma del método a:

public void SomeQuery(string email = "", Guid userId = emptyGuid) 
{ 
    // do some query 
} 

todavía hay amor.

¿Qué me falta?

+0

duplicado posible de [Cómo puedo defecto un parámetro para Guid.Empty en C#?] (Https://stackoverflow.com/questions/5117970/how-can-i-default-a-parameter-to-guid-empty-in-c) –

Respuesta

20

has necesitado ajustarlo a una nueva instancia de Guid ala:

public void SomeQuery(string email = "", Guid userId = new Guid()) 
{ 
    // do some query 
} 

debe hacer el truco.

+0

Eso es todo. ¡Aclamaciones! – RPM1984

+0

@ RPM1984 ¡Me alegra oírlo! –

+3

Lo bueno de este enfoque es que todavía puedes probarlo usando Guid.Empty en tu código. p.ej. if (userId == Guid.Empty) {...} –

2

¿No sería una mejor solución sobrecargar el método con una versión que no requiere el Guid? Esto resolvería el problema, y ​​sería un mejor diseño en mi opinión. Por supuesto, puede haber otras limitaciones de las que no estoy consciente de la necesidad de este diseño.

+0

El objetivo de C# 4 Optional Parameters es evitar una sobrecarga innecesaria. Tengo alrededor de 7 parámetros por los que estoy filtrando (en una consulta LINQ), ¿por qué sobrecargar un método 7 veces con el mismo código? Supongo que esas son las "otras restricciones" a las que se refiere. =) – RPM1984

+1

para 2 argumentos es mejor tener 2 métodos sobrecargados que los parámetros opcionales IMO. Principalmente es para diseño como mySuperObject.Add (ref uno, ref dos, ref tres, ref cuatro, ref cinco) vs mySuperObject.Add(); –

2

tal vez ayudaría (usando el operador ?? y Guid tipo anulable)

public void some_method(string name, Guid? guid = null) 
{ 
     _name = name; 
     _guid = guid ?? Guid.NewGuid(); 
} 
+0

hola, si intento esto me sale un mensaje (más o menos traducido): Un valor de tipo '' kann no se utiliza como parámetro estándar, porque no hay una conversión estándar a "System.Guid ' – Offler

Cuestiones relacionadas