147 c# int compiler-errors type-conversion implicit-conversion
为什么第一个和第二个写入工作但不是最后一个?有没有办法我可以允许所有3个并检测它是1,(int)1还是我传入?真的为什么一个允许但最后一个?第二个被允许但不是最后一个真的让我大吃一惊.
using System;
class Program
{
public static void Write(short v) { }
static void Main(string[] args)
{
Write(1);//ok
Write((int)1);//ok
int i=1;
Write(i);//error!?
}
}
Run Code Online (Sandbox Code Playgroud)
Cod*_*aos 186
前两个是常量表达式,最后一个不是.
C#规范允许从int到short的隐式转换,但不能用于其他表达式.这是一个合理的规则,因为对于常量,编译器可以确保该值适合目标类型,但它不能用于正常表达式.
此规则符合隐式转换应无损的准则.
6.1.8隐式常量表达式转换
隐式常量表达式转换允许以下转换:
- 甲常数表达式型的(§7.18)
int可以转换为类型sbyte,byte,short,ushort,uint,或ulong,所提供的值常数表达式是在目标类型的范围内.- 甲常数表达式类型的
long可转换为类型ulong,提供的值常量表达式不为负.
(引自C#语言规范版本3.0)
Kon*_*lph 67
没有来自隐式转换int来short的,因为截断的可能性.但是,常量表达式可以被编译器视为目标类型.
1?不是问题:它显然是一个有效的short价值.i?没有那么多 - short.MaxValue例如,它可能是一些值,并且编译器在一般情况下无法检查它.
| 归档时间: |
|
| 查看次数: |
5996 次 |
| 最近记录: |