我在SqlServer中的一种数据类型是smallint映射到.NET short或Int16在.NET中.我正在使用一个简单的for循环,我是一个int,它告诉我它不能隐含地在两者之间转换?
我只是想知道为什么这是不可能的?是否只是为了防止你使用比短期更多的数字?这对我来说似乎很奇怪,因为我大约80%肯定我从来没有必要转换int成一个long?
样品:
public Int16 Test()
{
int i = 2;
return i;
}
Run Code Online (Sandbox Code Playgroud)
由于潜在的数据丢失,因为您从窄到宽,从宽到窄都不会隐式支持隐式from short到intshould .编译器允许您忽略这一点,但是在这些情况下明确强制转换的请求表明您已了解其潜力并且您可以使用它.
更新:
您的代码是一个缩小的代码,无法隐式完成.固定:
public Int16 Test()
{
int i = 2;
return (Int16)i;
}
Run Code Online (Sandbox Code Playgroud)
虽然,在这种特殊情况下,编译器理论上可以知道不会发生数据丢失.对于其他99.99%的时间,它在编译时无法知道这一点,因此只有在可能发生数据丢失的情况下才支持显式转换.
这明显地将责任放在开发人员身上,以便当由于数据丢失而发生运行时错误时,开发人员必须先有意识地做出该决定,并且没有法律地位来向计算机投掷咒骂.
VB.NET似乎允许您使用Option Strict绕过这个限制:
http://msdn.microsoft.com/en-us/library/k1e94s7e(v=vs.80).aspx
所以我认为这是C#特定的设计选择.
| 归档时间: |
|
| 查看次数: |
2943 次 |
| 最近记录: |