2016-03-25 4 views
0

Я создал метод под названием «тег», который возвращает объект HtmlTag и получает параметры типа «HtmlTag» (см. ниже).C# params без встроенного массива вызывают ошибку «Именованные параметры аргумента должны появляться после того, как были заданы все фиксированные аргументы»

Я пытаюсь передать параметры без встроенного массива, но получаю сообщение об ошибке: «Именованные параметры аргументов должны появляться после того, как были указаны все фиксированные аргументы».

Ошибка решена только путем вставки параметров в встроенный массив (которого я действительно не хочу).

Могу ли я передать параметры без массива?

protected HtmlTag tag(string tagName, string id = null, string classes = null, 
    Dictionary<string, object> attributes = null, Dictionary<string, object> data = null, 
    string text = null, params HtmlTag[] content) 
{yada yada...} 

Ниже, как я называю метод сверху:

tag("form", "", attributes: ObjList("...."), content: 
        tag("input", "token", attributes: ObjList("..." + token + "...")), 
        tag("label", "...", attributes: ObjList("..."), text: "..."), 
        tag("...", "...", attributes: ObjList("..."))); 

У меня нет никаких ошибок, когда я ввожу значение «содержание» Params внутри строкового массива HtmlTag (смотри ниже):

tag("form", "", attributes: ObjList("...."), content: new HtmlTag[] { 
        tag("input", "token", attributes: ObjList("..." + token + "...")), 
        tag("label", "...", attributes: ObjList("..."), text: "..."), 
        tag("...", "...", attributes: ObjList("..."))}); 
+3

Если вы хотите передать приведенные аргументы, я не думаю, что есть способ, кроме создания массива. Именованные аргументы и 'params' не хорошо ладят – Jcl

+0

Именованные и необязательные аргументы ... ugh. Так что очень VB. Используйте надлежащие перегрузки. – Nyerguds

ответ

0

Благодаря Nyerguds и Jcl я использую перегруженный метод в качестве ответа. Кажется, что это единственный способ пойти (кроме встроенного массива)

+2

Возможно, так как 'params' являются _allways_ последними аргументами, все, что вам нужно было сделать, так это оставить имя' content: '. Система, вероятно, обнаружит, что все эти аргументы «HtmlTag» были правильным типом для «params» таким образом. – Nyerguds