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!

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top