如何在没有 If/Else 或 Try/Catch 的情况下在 C#/MVC 中传播空实例?

How to propogate null instance in C#/MVC without If/Else or Try/Catch?

我在 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/ElseTry/Catch

的情况下处理需要语句输出的情况

just C# 中,空值传播运算符可以提供帮助,即

var x = obj?["bar"];

但是请注意,这仅涉及 nulls;如果问题是 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")">

我不知道我是否理解问题,但根据你想做的,你必须加上一个if:

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

它是一个 if,但使用线性语法

JObject 有一个 SelectToken 方法,您可以将其用于您的场景。

  JObject jsonDoc = JObject.Parse(json);

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

Here 您将找到 SelectToken

的参考代码

如果未找到标记,SelectToken 将 return 清空,如果结果有效,则 return 结果

使用三元:

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

如果不起作用,请将整个属性封装在三元中。