存在从 sbyte 到 short、int、long、float、double 或 decimal 的预定义隐式转换。
不能将存储大小更大的非文本数值类型隐式转换为 sbyte 类型(有关整型的存储大小的信息,请参见整型表(C# 参考))。例如,请看以下两个 sbyte 变量 x 和 y:
以下赋值语句将产生一个编译错误,原因是赋值运算符右侧的算术表达式在默认情况下的计算结果为 int 类型。
sbyte z = x + y; // Error: conversion from int to sbyte 若要解决此问题,请按如下方法对表达式进行强制转换:
sbyte z = (sbyte)(x + y); // OK: explicit conversion 但是,在目标变量具有相同或更大的存储大小时,使用下列语句是可能的:
sbyte x = 10, y = 20;
int m = x + y;
long n = x + y; 还请注意,不存在从浮点型到 sbyte 类型的隐式转换。例如,除非使用显式强制转换,否则以下语句将生成一个编译器错误:
sbyte x = 3.0; // Error: no implicit conversion from double
sbyte y = (sbyte)3.0; // OK: explicit conversion 有关兼用浮点型和整型的算术表达式的信息,请参见 float 和 double。
有关隐式数值转换规则的更多信息,请参见隐式数值转换表(C# 参考)。