我写了一段代码如下:
var i=5;
i='K';
代码正在编译,没有错误。就我的概念而言,我无法在 var 中重新分配值。由于我已将整数 5 分配给 i。i 的类型是 int。那么为什么它允许在 i 中分配一个 char 'K' 呢?
我写了一段代码如下:
var i=5;
i='K';
代码正在编译,没有错误。就我的概念而言,我无法在 var 中重新分配值。由于我已将整数 5 分配给 i。i 的类型是 int。那么为什么它允许在 i 中分配一个 char 'K' 呢?
因为 achar
可以隐式转换为 a int
。变量的类型i
仍然是int
——你可以使用它来测试i.GetType()
——它的值是字符的代码点'K'
(即,75
)。
换句话说,您的代码相当于编写:
int i = 'K';
“就我的概念而言,我无法在 var 中重新分配值。” ——这是不正确的。您无法更改隐式类型变量的类型(就像您无法更改任何其他变量的声明类型一样),但您可以重新为其分配相同类型的另一个值(或可能被强制转换的值) )。
i
在您的第一次分配期间被隐式键入为整数。然后,您尝试将 char 值分配给整数。