检查 JValue 是否为空
Checking if JValue is null
为什么这段代码没有 运行,我想检查 JSON 是否包含键 PurchasedValue
的整数? () :
public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
this.jToken = jToken;
int PurchasedValue = (int)(jToken["PurchasedValue"].Value ?? 0);
}
错误是:
Error CS0019: Operator `??' cannot be applied to operands of type `method group' and `int' (CS0019)
根据我的理解,jToken["PurchasedValue"]
是一个可以为 null 的值。
你必须使用
int PurchasedValue = (int)(jToken["PurchasedValue"]?? 0);
nullableObj.Value
只有在 nullableObj
有值时才能正确使用
否则你可以使用like
int PurchasedValue = jToken["PurchasedValue"].HasValue?jToken["PurchasedValue"].Value: 0;
这可能甚至不需要类型转换
嗯,这里有几件事:
jToken["PurchasedValue"] 可以 return 任何东西,所以最好进行类型检查。
您可以按如下方式更改代码:
public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
this.jToken = jToken;
int PurchasedValue = jToken["PurchasedValue"] is int ? jToken["PurchasedValue"] : 0;
}
您可以比较令牌类型:
var purchasedValueToken = jToken["PurchasedValue"];
int purchasedValue = purchasedValueToken.Type == JTokenType.Null ? 0 : purchasedValueToken.Value<int>();
为什么这段代码没有 运行,我想检查 JSON 是否包含键 PurchasedValue
的整数? () :
public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
this.jToken = jToken;
int PurchasedValue = (int)(jToken["PurchasedValue"].Value ?? 0);
}
错误是:
Error CS0019: Operator `??' cannot be applied to operands of type `method group' and `int' (CS0019)
根据我的理解,jToken["PurchasedValue"]
是一个可以为 null 的值。
你必须使用
int PurchasedValue = (int)(jToken["PurchasedValue"]?? 0);
nullableObj.Value
只有在 nullableObj
否则你可以使用like
int PurchasedValue = jToken["PurchasedValue"].HasValue?jToken["PurchasedValue"].Value: 0;
这可能甚至不需要类型转换
嗯,这里有几件事:
jToken["PurchasedValue"] 可以 return 任何东西,所以最好进行类型检查。
您可以按如下方式更改代码:
public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
this.jToken = jToken;
int PurchasedValue = jToken["PurchasedValue"] is int ? jToken["PurchasedValue"] : 0;
}
您可以比较令牌类型:
var purchasedValueToken = jToken["PurchasedValue"];
int purchasedValue = purchasedValueToken.Type == JTokenType.Null ? 0 : purchasedValueToken.Value<int>();