string.Format вставить строку как параметр без кавычек - PullRequest
0 голосов
/ 12 ноября 2018

Я форматирую строку:

string.Format(
            "{{\"EventType\":\"{0}\",\"OrganizationId\":\"{1}\",\"Timestamp\":{2},\"ExecutionTime\":{3},\"Success\":{4}}}",
            telemetryEvent.EventType ?? "null", telemetryEvent.OrganizationId ?? "null", telemetryEvent.Timestamp,
            telemetryEvent.ExecutionTime, telemetryEvent.Success);

Мне нужно получить значение NULL вместо строки, если оно NULL.

например. "" OrganizationId ": нулевой" но я получаю "" OrganizationId ":" null "" вместо

Спасибо

Ответы [ 3 ]

0 голосов
/ 12 ноября 2018

Вы получаете "ноль", потому что кавычки уже добавлены строковым шаблоном:

"{{\"EventType\":\"{0}\"
  ,\"OrganizationId\":\"{1}\",...

Итак, что бы вы ни указали в {0} и {1}, оно будет заключено в двойные кавычки.

Чтобы избавиться от них, добавьте кавычки вокруг самих переменных.

Обновление: Извините, моя предыдущая версия была неверной (спасибо Зоар за то, что заметил это). Подход верен, но вам нужно использовать троичное выражение вместо оператора объединения нулей:

"{{\"EventType\":{0},\"OrganizationId\":{1},...
  ,telemetryEvent.EventType != null ? "\"" + telemetryEvent.EventType + "\"" : "null"
  ,telemetryEvent.OrganizationId != null ? "\"" + telemetryEvent.OrganizationId + "\"" : "null",...

Это становится "немного" громоздким, как это, хотя, так что, вероятно, есть лучшие подходы

Возможно, вы уже знаете, но такой тип построения строк становится более читабельным при использовании интерполяции строк (ср. https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/tokens/interpolated).

0 голосов
/ 12 ноября 2018

У вас есть кавычки около {1}, поэтому кавычки всегда будут появляться в выводе.Переместите их в значение для параметра 1.

string.Format(
        "{{\"EventType\":\"{0}\",\"OrganizationId\":{1},\"Timestamp\":{2},\"ExecutionTime\":{3},\"Success\":{4}}}",
        telemetryEvent.EventType ?? "null", 
        telemetryEvent.OrganizationId ?? "null", "\"" + telemetryEvent.Timestamp + "\"",
        telemetryEvent.ExecutionTime, telemetryEvent.Success);
0 голосов
/ 12 ноября 2018

Я думаю, что самым простым решением, вероятно, было бы использование replace:

string.Format(
        "{{\"EventType\":\"{0}\",\"OrganizationId\":\"{1}\",\"Timestamp\":{2},\"ExecutionTime\":{3},\"Success\":{4}}}",
        telemetryEvent.EventType ?? "null", telemetryEvent.OrganizationId ?? "null", telemetryEvent.Timestamp,
        telemetryEvent.ExecutionTime, telemetryEvent.Success)
    .Replace("\"null\"", "null");

Вы можете увидеть живое демо на rextester.

...