Параметры C# без встроенного массива вызывают ошибку. Спецификации именованных аргументов должны появляться после указания всех фиксированных аргументов.

Я создал метод под названием «тег», который возвращает объект HtmlTag и получает параметры типа «HtmlTag» (см. ниже).

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

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

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

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("...")));

У меня нет ошибок, когда я вставляю значение параметра "content" внутри встроенного массива HtmlTag (см. ниже):

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

person Loves2Develop    schedule 25.03.2016    source источник
comment
Если вы хотите передать названные аргументы, я не думаю, что есть другой способ, кроме как сделать его массивом. Именованные аргументы и params плохо ладят   -  person Jcl    schedule 25.03.2016
comment
Именованные и необязательные аргументы... тьфу. Так очень ВБ. Используйте правильные перегрузки.   -  person Nyerguds    schedule 25.03.2016


Ответы (1)


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

person Loves2Develop    schedule 25.03.2016
comment
Возможно, поскольку params всегда являются последними аргументами, все, что вам нужно было сделать, это убрать имя content:. Таким образом, система, вероятно, обнаружит, что все эти аргументы HtmlTag имеют правильный тип для params. - person Nyerguds; 25.03.2016