0
我對使用dynamic
的一些代碼結果感到困惑。將動態投射爲int成功但是'as int?'返回null
我在使用Newtonsoft json.net庫解析C#中的一些JSON。 JSON字符串結尾是這樣的:
}],"Result":{"820":1,"821":1,"822":2,"823":0}}
,所以我成立了一個類來包含解析JSON:
public class Poll
{
public Answer[] Answer { get; set; }
public dynamic Result { get; set; }
}
,然後分析我的JSON字符串此行
var poll = JsonConvert.DeserializeObject<BallotsharePoll>(json);
然後將此代碼深入到動態對象中:
if (poll.Result["820"] != null)
{
var votes = (int)(poll.Result["820"]).Value;
result[i] = votes;
}
這有效。但我的原始代碼使用int?和線
var votes = (poll.Result["820"]).Value as int?;
如圖監視窗口這裏其將失敗:
這表明
- 的
poll.Result["820"]
動態值是{1}
, - 的
(int)(poll.Result["820"]).Value
的值是1
, - 但
(poll.Result["820"]).Value as int?
值null
問題:爲什麼as int?
回報null
而鑄造int
結果1
?
我寧願使用int?
來覆蓋動態值不能被強制爲int
的情況。