为什么这段代码没有运行,我想检查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)
答案 0 :(得分:7)
根据我的理解,jToken["PurchasedValue"]
是一个可以为空的值。
你必须使用
int PurchasedValue = (int)(jToken["PurchasedValue"]?? 0);
nullableObj.Value
只有在nullableObj
否则您可以使用
int PurchasedValue = jToken["PurchasedValue"].HasValue?jToken["PurchasedValue"].Value: 0;
这可能甚至不需要类型转换
答案 1 :(得分:3)
嗯,这里有几件事情:
jToken [" PurchasedValue"]可以返回任何内容,因此最好进行类型检查。
您可以按以下方式更改代码:
public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken)
{
this.jToken = jToken;
int PurchasedValue = jToken["PurchasedValue"] is int ? jToken["PurchasedValue"] : 0;
}
答案 2 :(得分:2)
您可以比较令牌类型:
var purchasedValueToken = jToken["PurchasedValue"];
int purchasedValue = purchasedValueToken.Type == JTokenType.Null ? 0 : purchasedValueToken.Value<int>();