2011-02-25 11 views
18

Estoy usando C# .net 3.5 para crear una aplicación. He estado trabajando con atributos de parámetros opcionales en .NET 4.0 sin problemas. Me di cuenta de que con 3,5 existe la opción (solución) para agregar los siguientes atributos a su método de este modo:C# 3.5 Opcional y DefaultValue para los parámetros

public static void MethodName(string name, [Optional][DefaultValue(null)]string placeHolder) 
    { 

    } 

pesar de que he añadido los atributos para el método, si lo intento y lo llaman como tal :

 MethodName("test"); 

El compilador se quejará de que está buscando a dos parámetros en lugar de uno. ¿Es realmente posible hacer esto usando C# .net 3.5? ¿Estoy haciendo algo mal?

+0

Sucede lo mismo con nosotros. ¿Encontró alguna solución? – PrateekSaluja

Respuesta

33

Los parámetros opcionales son la característica del lenguaje C# 4.0, por lo que no importa a qué marco se dirige, pero debe compilarlo utilizando VS 2010 o posterior.

Utilice esta sintaxis en VS 2010 o más reciente:

public static void MethodName(string name, string placeHolder = null) 
{ 
    // body 
} 

O esto en más viejo:

public static void MethodName(string name, string placeHolder) 
{ 
    // body 
} 

public static void MethodName(string name) 
{ 
    MethodName(name, null); 
} 
+0

Sí, intenté configurar la versión de framework en 3.5 en VS2010, pero aún arroja un error de compilación. "Argumentos no coinciden". – Deano

+0

También estaba buscando una forma de hacer esto sin tener que hacerlo de la manera anterior, parece que debería hacerlo. – Deano

+0

En las propiedades del proyecto, vaya a la pestaña de creación, avanzada y establezca el idioma en C# 4.0. Eso debería funcionar incluso cuando se configura el framework .NET 3.5. – rotman

6

El atributo Optional ha estado disponible desde C# 1.0, y se utiliza cuando interoperar con externa código, no tiene ningún efecto en las llamadas a métodos en su propio código.

Como no hay parámetros opcionales en C# 3, puede utilizar sobrecargando su lugar:

public static void MethodName(string name, string placeHolder) { 
    ... 
} 

public static void MethodName(string name) { 
    MethodName(name, null); 
} 

(Nota al margen: No hay C# versión 3.5, que es una versión del marco.)

4

Take un vistazo al siguiente hilo de StackOverflow: C# Optional Parameters in .net 3.5

No se usa copiar todo lo que se ha dicho allí, ya que el hilo cubre casi todo. Buena suerte.

+0

Sí, vi esa pregunta: desafortunadamente intenté configurar la versión de framework en 3.5 en VS2010, pero aún arroja un error de compilación. "Argumentos no coinciden" – Deano

Cuestiones relacionadas