2017-04-27 235 views
4

为什么这段代码不运行,我想检查JSON是否包含键PurchasedValue的整数? ():检查JValue是否为空

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

这是Newtonsoft JSON.NET – AVEbrahimi

回答

4

从我的理解jToken["PurchasedValue"]是一个空值。 你必须使用

int PurchasedValue = (int)(jToken["PurchasedValue"]?? 0); 

nullableObj.Value可以在没有错误的前提下使用时,才会有对nullableObj

。否则你可以像使用

int PurchasedValue = jToken["PurchasedValue"].HasValue?jToken["PurchasedValue"].Value: 0; 

这甚至可能不需要类型铸造

+0

PurchasedValue =(INT)(jToken [ “PurchasedValue”]的TYPE = JTokenType.Null jToken [ “PurchasedValue”!? ] .Value ():0); – AVEbrahimi

4

那么,这里有几件事情:

jToken [“PurchasedValue”]可以返回任何内容,因此类型检查会更可取。

你可以改变你的代码如下:

public PropertyInfo(Newtonsoft.Json.Linq.JToken jToken) 
{ 
    this.jToken = jToken; 
    int PurchasedValue = jToken["PurchasedValue"] is int ? jToken["PurchasedValue"] : 0; 
}