这是一个有点不寻常的问题,但我无法在投射数字类型时出现转换错误。我需要得到一些像“值太短”等错误,但似乎C#守护它很好。 你能否给我提供一个简单的代码,在铸造时失败? (如计算器..)投射int类型时可以调用铸造错误吗?
回答
可以使用checked关键字显式地检查整体类型转换的溢出:
int i = int.MaxValue;
short s = checked((short)i);
还有,它可以使检查转换默认的一个checked compiler flag。
你能否给我提供一个简单的代码,该代码在铸造时失败?
int i = 400;
object o = i; // here o will be System.Int32 automatically
string s = (string)o; //Runtime Exception thrown System.InvalidCastException:
这不是运行时错误;) – user970696 2012-08-05 13:10:41
@ user970696好吧坏了更新它 – HatSoft 2012-08-05 13:11:03
@ user970696我已经更新了我的答案,它会在运行时抛出错误在o时将字符串转换为字符串 – HatSoft 2012-08-05 13:13:00
这听起来像你正在尝试写一些错误处理代码。该编译器做看不当蒙上了伟大的工作,但如果你正在寻找一个运行时异常:
short y = short.Parse("56789");
这将引发OverflowException
。
OverflowException:值对于 Int16来说太大或太小。
- 1. 奇怪的铸造行为。不能投射对象(int)以长
- 2. 铸造类型映射,FluentNhibernate
- 3. Java泛型 - 错误铸造泛型类
- 4. 没有编译时错误铸造错误的类型时
- 5. 当铸造类'无法铸造'错误
- 6. 铸造匿名类型抛出铸造错误
- 7. 铸造接口可以在阵列类型上反射
- 8. Firebase Swift 3类型铸造错误
- 9. webAPI,类型错误的铸造对象
- 10. 窄铸造int到更小的类型
- 11. 类型铸造int到双java?
- 12. 类型铸造int到双C++
- 13. 铸造apr_time_t不同int型
- 14. 铸造类型
- 15. 铸造为int和浮点错误?
- 16. 是否可以投射类型参数?
- 17. 反射+的Linq +型铸造
- 18. 错误铸造
- 19. 铸造从类型类型
- 20. C#类型在运行时使用反射铸造
- 21. 在Java中的类型铸造/铸造
- 22. 我可以有条件地投射到不同的类型吗?
- 23. 运行时错误当铸造(向下铸造)类型到另一个子类型
- 24. flex3类型铸造
- 25. 类型铸造datetime
- 26. SQL类型铸造
- 27. Windbg类型铸造
- 28. Python类型铸造
- 29. Oracle类型铸造
- 30. VB.NET - 铸造类型
请您澄清一下您的期望?在将整数简写为short时,您明确地说“我知道int更大,我知道这个演员阵容可能会丢失数据,我仍然希望它。” – user1527329 2012-08-05 13:00:03
是的,我希望看到错误。我只是希望得到一个运行时错误。 – user970696 2012-08-05 13:02:17