There is a predefined implicit conversion from sbyte to short, int, long, float, double, or decimal.
You cannot implicitly convert nonliteral numeric types of larger storage size to sbyte (see Integral Types Table (C# Reference) for the storage sizes of integral types). Consider, for example, the following two sbyte variables x and y:
The following assignment statement will produce a compilation error, because the arithmetic expression on the right side of the assignment operator evaluates to int by default.
sbyte z = x + y; // Error: conversion from int to sbyte
To fix this problem, cast the expression as in the following example:
sbyte z = (sbyte)(x + y); // OK: explicit conversion
It is possible though to use the following statements, where the destination variable has the same storage size or a larger storage size:
sbyte x = 10, y = 20;
int m = x + y;
long n = x + y;
Notice also that there is no implicit conversion from floating-point types to sbyte. For example, the following statement generates a compiler error unless an explicit cast is used:
sbyte x = 3.0; // Error: no implicit conversion from double
sbyte y = (sbyte)3.0; // OK: explicit conversion
For information about arithmetic expressions with mixed floating-point types and integral types, see float and double.
For more information about implicit numeric conversion rules, see the Implicit Numeric Conversions Table (C# Reference).