Essa é uma pegadinha. Tendo os seguintes métodos:

FazAlgo(object arg) {} //overload 1
FazAlgo(params object[] args) {} //overload 2

Se você chamar assim:

FazAlgo("algum param");

Sabemos que o primeiro overload é chamado, certo?

Mas e se chamarmos ele assim:

string[] parametros = {"Giovanni", "Bassi"};
FazAlgo(parametros);

O que acontece? Qual overload é chamado?

Vejam as opções:

  1. O primeiro é chamado, passando um array de strings como um objeto.
  2. O segundo é chamado, passando um array de strings como se fosse um array de objetos.
  3. O segundo é chamado, passando um array de strings como um objeto do array args, como se implicitamente fizesse “FazAlgo(new object[] {parametros})”

Dou a resposta na próxima segunda-feira.

Dêem as respostas nos comentários. Não vale apenas dizer qual das opções é a certa, tem que explicar por que.

(E não vale ir no Visual Studio ver o que acontece.)

Giovanni Bassi

Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.