Как распространить нулевой экземпляр в C # / MVC без If / Else или Try / Catch? - PullRequest
0 голосов
/ 15 октября 2019

У меня есть запись в Razor View, которая

<li data-img-url="@stock["images"][0]["url"]">
@* stock is a JObject which can contain or cannot contain ["images"]*@

Независимо от местоположения нулевого вхождения, как получить окончательную строку data-img-url="". Также, как обрабатывать такие ситуации, когда требуется вывод оператора, без добавления дополнительных блоков кода, таких как If/Else или Try/Catch

Ответы [ 4 ]

2 голосов
/ 15 октября 2019

JObject имеет метод SelectToken, который вы можете использовать для своего сценария.

  JObject jsonDoc = JObject.Parse(json);

  Console.WriteLine(jsonDoc.SelectToken("images[0].url"));

Здесь вы найдете код ссылки для SelectToken

SelectToken вернет пустое значение, если токен не найден, и вернет результаты, если это действительный результат

1 голос
/ 15 октября 2019

В просто C # здесь может помочь нуль-распространяющий оператор, т. Е.

var x = obj?["bar"];

, однако обратите внимание, что это имеет дело только с нуль ;это не поможет, если проблема KeyNotFoundException (потому что obj не null, но нет ключа "bar"). Итак: в общем случае: просто напишите метод, который делает то, что вам нужно , и который также делает все чище;это может быть метод расширения для любого stock, с учетом того, что методы расширения не проверяют ноль в аргументе this:

public static string GetFrob(this Stock stock, string grapple, int foo, string blap)
{...}

...

<li data-img-url="@stock.GetFrob("images", 0, "url")">
0 голосов
/ 15 октября 2019

Использовать троичную:

<li data-img-url="@(stock["images"][0]["url"]! = null:stock["images"][0]["url"]:"""> @* stock is a JObject which can contain or cannot contain ["images"]*@

Если не работает, заключите в троичный атрибут весь атрибут.

0 голосов
/ 15 октября 2019

Я не знаю, правильно ли я понял вопрос, но в соответствии с тем, что вы хотите сделать, вы должны поставить if:

@(stock["images"][0]["url"] == null ? "" : stock["images"][0]["url"])

это if, но с линейным синтаксисом

...