вы могли бы просто сделать,
Thing(1, string.Empty, new Hello(), new Hello());
, так как вы используете params
.
В этом отношении все это было бы совместимо.
Thing(1);
Thing(2, string.Empty);
Thing(3, string.Empty, null);
Thing(4, string.Empty, new Hello());
Thing(-69, "negative feeback", new Hello(), null);
Thing(42, "the meaning of life", new Hello(), new Hello());
Thing(666, theBeast.ToString(), new Hello(), new Hello(), new Hello());
// etc. etc.
Ваш комментарий Я думаю, что ваш вопрос на самом деле,
Почему я должен построить params
массив, используя имена параметров?
Этот вопрос является duplicate, но, в целом его потому, что это так.
Если вы хотите, чтобы пропустить s
и получить преимущества params
почему бы не объявить перегрузки,
public void Thing(int x, string s = "", params Hello[] hellos)
{
}
public void Thing(int x, params Hello[] hellos)
{
this.Thing(x, string.Empty, hellos);
}
Тогда вы все еще можете использовать params
как предполагалось, и вы не должны использовать имена параметров ,
Эта функциональность старше, чем необязательные параметры, и в значительной степени смягчает ваши требования, и я думаю, поэтому ее никогда не рассматривали.
Даже Джон Скит не смог придумать объяснения :) http://stackoverflow.com/questions/12747117/optional-argument-followed-by-params?rq=1 – Matten