¿Nombrado / parámetros opcionales en C # 3.0?
Pregunta
¿Hay una manera de agregar parámetros opcionales a C # 3.0 como si hubiera en C # 4.0? Tengo que tener esta característica, ¡simplemente no puedo esperar!
Editar:
Si conoce una solución alternativa / pirateo para lograr esto, publíquelo también. Gracias!
Solución
Puede usar un tipo anónimo y una reflexión como una solución a los parámetros nombrados:
public void Foo<T>(T parameters)
{
var dict = typeof(T).GetProperties()
.ToDictionary(p => p.Name,
p => p.GetValue(parameters, null));
if (dict.ContainsKey("Message"))
{
Console.WriteLine(dict["Message"]);
}
}
Así que ahora puedo llamar a Foo así:
Foo(new { Message = "Hello World" });
... y escribirá mi mensaje.
Básicamente, estoy extrayendo todas las propiedades del tipo anónimo que se pasó y las estoy convirtiendo en un diccionario de cadena y objeto (el nombre de la propiedad y su valor).
Otros consejos
Siempre hay sobrecarga de métodos. :)
Desafortunadamente, no. Necesitará el compilador C # 4.0 para soportar esto. Si desea parámetros opcionales en la plataforma .NET hoy, puede probar VB .NET o F #.
Como dijo Dustin, los parámetros opcionales vienen en C # 4.0. Un tipo de manera horrible de simular parámetros opcionales sería tener un objeto [] (o una matriz más tipificada) como su último argumento.
Uno también podría usar argumentos variables como parámetros de opción. Un ejemplo de cómo funciona esto es string.Format ().
Ver aquí:
http://blogs.msdn.com/csharpfaq /archive/2004/05/13/131493.aspx