文字和隐含缩小的转换

时间:2010-02-07 19:07:21

标签: c# .net clr

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

byte b = 100; 


b)如果编译器没有抱怨从 int literal type byte 的隐式缩小转换,那么为什么它也不允许从隐式缩小转换< em> double literal to type float (我意识到我们可以通过使用F / f后缀指定float literal来避免这个错误)?

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


谢谢

1 个答案:

答案 0 :(得分:4)

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

对于双重案例,C#lang规范没有具体说明为什么不允许这样做。我的猜测是,它确定双值是否适合浮点值有困难。获得浮点精度正确是一项非常困难的任务,可能因此不值得花费(如果可能的话)