c# - 文字和隐式缩小转换

标签 c# .net clr

a) 由于数字 100 是 int 类型的文字,并且编译器不允许隐式缩小转换,因此以下赋值难道不会导致错误吗?

byte b = 100; 


b) 如果编译器不提示从 int 文字字节类型 的隐式缩小转换,那么为什么它不允许从 进行隐式缩小转换em>双文字类型float(我意识到我们可以通过使用F/f后缀指定浮点文字来避免这个错误)?

byte b=16; //OK
float f1=16.9; //error


谢谢

最佳答案

C# 语言规范第 6.1.8 节对此进行了介绍。如果值在目标类型的范围内,则将 int 类型的常量表达式转换为 sbyte、byte、short、ushort、uint 或 ulong 是合法的。 C# 编译器很容易确定该值是否在适当的范围内,从而允许转换。

对于 double 情况,C# 语言规范没有具体指出为什么不允许这样做。我的猜测是,这与确定 double 值是否适合浮点值的困难有关。获得正确的浮点精度是一项非常困难的任务,而且可能非常困难,因此人们认为不值得付出这样的代价(如果可能的话)

关于c# - 文字和隐式缩小转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2217894/

相关文章:

c# - 引用 System.Windows.Automation

c# - 如何创建和访问数组

.net - 通过升级 .NET Framework 提高性能

c# - CLR在哪里存储一种类型实例的方法

c# - WPF JumpList 在 Windows 10 中不起作用

c# - 根据输入从 Azure 函数启动和停止 Docker 容器

c# - 在 ScriptMain.cs 之外的另一个类中使用 SSIS 变量

c# - 比较互联网上的两个文件是否相同

c# - 带有命名空间前缀的 xml 的 XPath 表达式

c# - 向 C# 类动态添加属性