C# 强转会不会抛出异常

最近遇到一个小伙伴问我,从一个很大的数强转,会不会抛出异常。实际上不会出现异常。

最简单的代码是使用一个比 maxvalue 大的数,然后用它强转

         long tathkDucmmsc = int.MaxValue ;
            tathkDucmmsc *= 2;
            int kuplStqfbbmx = (int) tathkDucmmsc; // -2

结果没有异常,只是拿到的值是 -2

但是因为默认是 unchecked 如果把上面的代码添加checked,那么就会出异常

           checked
            {
                long tathkDucmmsc = int.MaxValue;
                tathkDucmmsc *= 2;
                int kuplStqfbbmx = (int) tathkDucmmsc;
            }
System.OverflowException:“Arithmetic operation resulted in an overflow.”

但是对于 float ,他的值就不是这样了

            checked
            {
                double hcmzgSsby = float.MaxValue;

                hcmzgSsby *= 2;

                float djmmmkvawSswu = (float)hcmzgSsby;
            }    

可以看到 djmmmkvawSswu 的值是 Infinity 不会出现异常,所以对于浮点数不要通过异常来判断强转是不是超过最大值。

那么如何判断 Infinity ? 使用float.IsInfinitydouble.IsInfinity 都可以判断。


本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

python开发_os.path

=========================================

10450
来自专栏日常工作总结

C#:数据并行

在 Action<int, ParallelLoopState>等这样的action中,使用如下的代码可以实现stop和break:

16720
来自专栏蘑菇先生的技术笔记

探索c#之不可变数据类型

21240
来自专栏Code_iOS

数据结构:栈与队列

工程代码 Github: Data_Structures_C_Implemention -- Stack & Queue

14230
来自专栏施炯的IoT开发专栏

Microsoft Azure IoTHub Serials 2 - 如何为android应用添加IoTHub支持

1. 在build.gradle(app)文件的dependencies中添加对以下项的依赖:

13940
来自专栏风口上的猪的文章

.NET面试题系列[7] - 委托与事件

C#中的委托可以说俯拾即是,从LINQ中的lambda表达式到(包括但不限于)winform,wpf中的各种事件都有着委托的身影。C#中如果没有了事件,那绝对是...

9520
来自专栏技术栈大杂烩

Python locals() 的陷阱

在工作中, 有时候会遇到一种情况: 动态地进行变量赋值, 不管是局部变量还是全局变量, 在我们绞尽脑汁的时候, Python已经为我们解决了这个问题.

14820
来自专栏大内老A

WCF技术剖析之十四:泛型数据契约和集合数据契约(下篇)

在.NET中,所有的集合都实现了IEnumerable接口,比如Array、Hashtable、ArrayList、Stack、Queue等。有的集合要求元素具...

28160
来自专栏Create Sun

利用委托与Lambada创建和调用webapi接口

前言   现在项目中用的是webapi,其中有以下问题:       1.接口随着开发的增多逐渐增加相当庞大。     2.接口调用时不好管理。   以上是主要...

37290
来自专栏分布式系统和大数据处理

基于业务对象(列表)的排序

在上一篇文章 基于业务对象的筛选 中,我们讨论了如何实现Predicate<T>(T object)委托,自定义DateFilter 类来对业务对象进行筛选。与...

11220

扫码关注云+社区

领取腾讯云代金券