Nomeado / Parâmetros opcionais em C # 3.0?
Pergunta
Existe uma maneira de adicionar parâmetros opcionais para C # 3.0, como haverá em C # 4.0? Eu tenho que ter esse recurso, eu só não posso esperar!
Editar:
Se você conhece uma forma de contornar / cortar para alcançar este objetivo, postá-lo também. Obrigado!
Solução
Você pode usar um tipo anônimo e reflexão como uma solução para parâmetros nomeados:
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"]);
}
}
Então agora eu posso chamar Foo como esta:
Foo(new { Message = "Hello World" });
... e ele vai escrever a minha mensagem.
Basicamente eu estou extraindo todas as propriedades do tipo anônimo que foi passado, e convertendo-os em um dicionário de corda e objeto (o nome da propriedade e seu valor).
Outras dicas
Há sempre a sobrecarga de método. :)
Infelizmente, não. Você vai precisar do C # 4.0 do compilador para suportar isto. Se você quiser parâmetros opcionais na plataforma .NET hoje, você pode tentar VB .NET ou F #.
Como Dustin disse, parâmetros opcionais estão vindo em C # 4.0. Um tipo de forma de merda para simular parâmetros opcionais seria ter um objeto [] (ou matriz mais fortemente tipado) como seu último argumento.
Pode-se também usar argumentos variáveis ??como parâmetros de opção. Um exemplo da forma como isto funciona é string.Format ().
Veja aqui:
http://blogs.msdn.com/csharpfaq /archive/2004/05/13/131493.aspx