我将Dictionary定义为Dictionary(string,object)。我正在访问字典中的其他值(字符串)而没有问题,但是当我尝试访问'int'时,我遇到了问题。当我尝试编译时:
int score = obj["score"] as int;
我收到错误:''as'运算符不能与非可空值类型'int'一起使用
我很高兴把头埋在沙子里,我把它重新编写为:
int score = (int) obj["score"];
...它确实编译但在运行时我收到此错误:
InvalidCastException:无法从源类型转换为目标类型。
谁能告诉我哪里出错?
答案 0 :(得分:2)
http://msdn.microsoft.com/en-us/library/cscsdfbt(v=vs.90).aspx
as运算符就像一个强制转换操作。但是,如果转换 是不可能的,因为返回null而不是引发异常
Int32不是可以为空的类型,因此as
无法应用于它。
int score = obj["score"] as int? ?? 0;
这样可行,注意它正在转换为Nullable<int>
,然后如果转换失败则合并为0。
答案 1 :(得分:0)
答案 2 :(得分:0)
你也可以简单地使用Convert.ToInt32(value),Int32.Parse()或Int32.TryParse [作为bland建议]。所有这些都应该有用。
答案 3 :(得分:0)
这样做:
int score = Convert.ToInt32(obj["score"]);