2014-01-08 2 views
1

У меня есть метод, который принимает один динамически типизированный (возможно, не соответствующий) параметр и несколько необязательных параметров более чем одного типа. Есть ли способ указать, какие параметры вы передаете?Как указать параметр из нескольких необязательных параметров

С помощью этого кода я получаю ошибки в компиляторе (ниже), и я не хотел писать перегрузки или переписывать функцию с несколькими порядками для необязательных параметров.

  • Ошибка 2 Аргумент 3: не может конвертировать из 'строки' до 'BOOL'
  • Error 1 Лучших перегруженный метод подходит для индекса (интермедиат, BOOL, BOOL, строка)»имеет некоторые недопустимые аргументы

Код:

public void DoSomeWork() 
{ 
    Index<int>(Id, false,"test"); //compiler error 
} 

private void Index<T>(T o, bool flush = false, bool userDispose = true, string starter = "stop") 
{ 

} 

ответ

5

Вы можете отметить необязательные параметры с именем следуют двойной точкой. В вашем примере:

public void DoSomeWork() 
{ 
    Index<int>(Id, false, starter: "test"); 
} 

Это означает, что Id и false имена первых двух параметров o и flush, третий параметр userDispose не установлен и параметр starter устанавливается test.

Для получения дополнительной информации о названных и дополнительных параметрах, посмотрите на MSDN.

+0

Interresting, я этого не знал! – cubitouch

+0

Спасибо, именно то, что я искал (будет отмечен как ответ, как только он позволит мне). –

3

Используйте named arguments, что является одной из замечательных особенностей C#.

Index<int>(Id, flush: false, starter: "test"); 
+0

Спасибо, что сделал это для меня. –

Смежные вопросы