2012-08-05 69 views
0

这是一个有点不寻常的问题,但我无法在投射数字类型时出现转换错误。我需要得到一些像“值太短”等错误,但似乎C#守护它很好。 你能否给我提供一个简单的代码,在铸造时失败? (如计算器..)投射int类型时可以调用铸造错误吗?

+0

请您澄清一下您的期望?在将整数简写为short时,您明确地说“我知道int更大,我知道这个演员阵容可能会丢失数据,我仍然希望它。” – user1527329 2012-08-05 13:00:03

+0

是的,我希望看到错误。我只是希望得到一个运行时错误。 – user970696 2012-08-05 13:02:17

回答

4

可以使用checked关键字显式地检查整体类型转换的溢出:

int i = int.MaxValue; 
short s = checked((short)i); 

还有,它可以使检查转换默认的一个checked compiler flag

0

你能否给我提供一个简单的代码,该代码在铸造时失败?

int i = 400; 
object o = i; // here o will be System.Int32 automatically 

string s = (string)o; //Runtime Exception thrown System.InvalidCastException: 
+0

这不是运行时错误;) – user970696 2012-08-05 13:10:41

+0

@ user970696好吧坏了更新它 – HatSoft 2012-08-05 13:11:03

+0

@ user970696我已经更新了我的答案,它会在运行时抛出错误在o时将字符串转换为字符串 – HatSoft 2012-08-05 13:13:00

0

这听起来像你正在尝试写一些错误处理代码。该编译器做看不当蒙上了伟大的工作,但如果你正在寻找一个运行时异常:

short y = short.Parse("56789"); 

这将引发OverflowException

OverflowException:值对于 Int16来说太大或太小。