首页 > 解决方案 > 当我们使用整型文字初始化字节时是否存在隐式类型转换?

问题描述

我是 C# 的新手。

首先,请问是否int是C#中整数的默认类型?换句话说,整数的文字在 C# 中是否被视为 int?

如果是这样,因为我们总是可以如下声明一个字节:

byte b = 1;

请问在这个初始化过程中是否发生了隐式类型转换(我的猜测:文字1首先被视为int然后被转换为byte)?

如果我上面的猜测是正确的,我可以问为什么我们可以像上面那样隐式转换intbyte使用文字,而当文字被类型变量替换时我们不能这样做int(例如如下)?

int a = 1;
byte c = a; // error

此外,我发现对于常量:

const int d = 1;
byte f = d; // no error
const long g = 1;
int i = g; // error
byte h = g; //error

任何人都可以对这些进行更多解释吗?

我问这个是因为它给我一种不一致的感觉。

非常感谢

标签: c#

解决方案


整数的文字在 C# 中被视为 int 吗?

不必要。整数文字可以有类型int, uint, longand ulong,这取决于它有什么后缀(U和/或L)。

还:

如果字面量没有后缀,则它具有可以表示其值的第一个类型:int, uint, long, ulong

因此,如果值可以适合int,它将具有 类型int。如果它不能适合 anint但可以 a uint,那么它将具有 type uint,依此类推。

请问在这个初始化过程中是否发生了隐式类型转换?

我可以问为什么我们可以使用上面的文字将 int 隐式转换为字节,而当文字被 int 类型的变量替换时我们不能这样做?

在这两行中,

byte b = 1;
byte f = d;

执行相同的转换 -隐式常量表达式转换

A constant_expressionof typeint可以转换为 type sbyte, byte, short, ushort, uint, or ulong,前提是 的值constant_expression在目标类型的范围内。

字面量1d都是type的常量表达式int

a不起作用,因为它是一个变量,显然不是一个常量,所以不是一个常量表达式。

g不起作用,因为它是 type 的常量表达式long,并且隐式常量表达式转换仅适用于ints.


推荐阅读