StringBuilder AppendFormat с @

2

Можно ли как-то это сделать, не вынимая @? Это не нравится @

    cJavaScript.AppendFormat(@"

            function GetNextProductIDs(state) 
            {

                var productIDs = new Array();

                var {0}lastProductFoundIndex = $.inArray({0}lastProductID, {0}allProductIDs);
                return productIDs.join();
            }; ", ClientID);
  • 0
    Какую ошибку вы получаете?
  • 0
    что значит "не нравится @"?
Показать ещё 4 комментария
Теги:

4 ответа

15
Лучший ответ

Проблема заключается не в @, а в фигурной скобке. Использование двух фигурных скобок приведет к их эффективному отмене.

cJavaScript.AppendFormat(@"
        function GetNextProductIDs(state) 
        {{

            var productIDs = new Array();

            var {0}lastProductFoundIndex = $.inArray({0}lastProductID, {0}allProductIDs);
            return productIDs.join();
        }}; ", ClientID);
0

Мне нравится использовать строку use.Concat или StringBuilder для добавления многострочных строк, подобных этому вместе. Обычно мне все равно, если cr/lf там, но вы можете настроить, если вы это сделаете:

string fmt = string.Concat(
    "function GetNextProductIDs(state) ",
    "{",
        "var productIDs = new Array();"
    ...
    );
cJavaScript.AppendFormat(fmt, ClientID);
  • 1
    Нет необходимости использовать построитель строк, когда строки являются константами. Компилятор C # использует константное свертывание для объединения их в одну строку во время компиляции.
  • 0
    Извините, я хотел добавить, что использование строителя строк обычно рекомендуется из соображений производительности, чтобы избежать копирования строк при объединении нескольких строк. Однако в этом сценарии использование построителя строк или Concat на самом деле менее производительно, а также генерирует больше кода.
Показать ещё 6 комментариев
0

Все, что делает "@", это соблюдение разрывов строк. Вы можете удалить "@", заменив разрывы строк на "\ r\n":

cJavaScript.AppendFormat(
        "function GetNextProductIDs(state)\r\n" +
        "{\r\n\r\n" +
        "    var productIDs = new Array();\r\n\r\n" +
        "    var {0}lastProductFoundIndex = $.inArray({0}lastProductID, {0}allProductIDs);\r\n" +
        "    return productIDs.join();\r\n" +
        "}; ", ClientID);
  • 0
    это также удерживает вас от необходимости бежать », что мне нравится, и у меня будет в некоторых моих JavaScript (я просто не выложил здесь все, чтобы вы могли это увидеть). Мне не нравится избегать вещей, если я не нужно, просто больше кода и проблем с читаемостью
  • 1
    Мне также интересно, если делать все эти + побеждает цель использования StringBuilder в первую очередь
Показать ещё 5 комментариев
0

Метод StringBuilder AppendFormat принимает строку формата. Поскольку используемая строка содержит { и } в качестве фигурного скобки JavaScript, она интерпретирует этот метод как токен формата.

Чтобы избежать их, используйте двойные фигурные скобки {{ и }}.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню