Rob*_*vey 5 c# casting compiler-errors
考虑这个静态测试类:
public static class Test
{
public static ushort sum(ushort value1, ushort value2)
{
return value1 + value2
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致以下编译错误,value1 + value2下划线为红色:
无法将类型'int'隐式转换为'ushort'.存在显式转换(您是否错过了演员表)?
为什么?
与之前的C和C++一样,当与许多运算符一起使用时,整数会被隐式加宽.在这种情况下,将两个ushort值加在一起的结果是int.
更新:
更多信息:http://msdn.microsoft.com/en-us/library/aa691330(v = VS.71).aspx
我相信这最初是在C/C++中添加的,因为它int是一个本机整数类型(是的,操作在ints上比short在32位体系结构上更快).我不确定C#的完整原理.
它确实会让你在投射时考虑溢出/截断注意事项.较小的整数类型更可能发生意外溢出.
以下赋值语句将产生编译错误,因为赋值运算符右侧的算术表达式默认情况下计算为int.
ushort z = x + y; // Error: conversion from int to ushort
Run Code Online (Sandbox Code Playgroud)
要解决此问题,请使用强制转换:
ushort z = (ushort)(x + y); // OK: explicit conversion
Run Code Online (Sandbox Code Playgroud)