如何在没有 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/Else
或 Try/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"]*@
如果不起作用,请将整个属性封装在三元中。
我在 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
在 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"]*@
如果不起作用,请将整个属性封装在三元中。