0

我有一个字典定义为字典(字符串,对象)。我正在毫无问题地访问字典中的其他值(字符串),但是当我尝试访问“int”时,我遇到了问题。当我尝试编译这个时:

            int score = obj["score"] as int;

我收到错误:'as' 运算符不能与不可为空的值类型'int'一起使用

我非常乐意把头伸进沙子里,我把它重新编码为:

        int score = (int) obj["score"];

...它确实编译但在运行时我收到此错误:

InvalidCastException:无法从源类型转换为目标类型。

谁能告诉我哪里出错了?

4

4 回答 4

2

http://msdn.microsoft.com/en-us/library/cscsdfbt(v=vs.90).aspx

as 运算符类似于强制转换操作。但是,如果无法进行转换,则 as 返回 null 而不是引发异常

Int32 不是可空类型,因此as不能应用于它。

int score = obj["score"] as int? ?? 0;

这将起作用,请注意,Nullable<int>如果转换失败,它正在转换为然后合并为 0。

于 2013-09-12T18:13:48.307 回答
0

假设您的值是一个字符串:

int score = -1;
int.TryParse(obj["score"], out score);

您必须从字符串中解析整数。

于 2013-09-12T18:10:08.213 回答
0

您也可以简单地使用 Convert.ToInt32(value)、Int32.Parse() 或 Int32.TryParse [按照平淡的建议]。所有这些都应该工作。

于 2013-09-12T18:11:20.823 回答
0

这样做:

 int score = Convert.ToInt32(obj["score"]);
于 2013-09-12T18:36:30.030 回答