在C#中减去整数时的错误

时间:2019-02-07 16:49:45

标签: c#

我是C#的新手,因此很抱歉提出这个可能很愚蠢的问题。但是,我找不到答案。减去整数时为什么会出现以下错误?

        Console.WriteLine(num2.GetType()); // System.Int16
        Console.WriteLine(num1.GetType()); // System.Int16
        num2 = num1 - num2;

“ num1-num2”显示为红色下划线,并显示“无法将int隐式转换为short”

这是什么问题?

2 个答案:

答案 0 :(得分:4)

如果您在代码中增加一行而不出现错误行,就会更加清楚

short num1 = 2;
short num2 = 4;
Console.WriteLine(num2.GetType()); // System.Int16
Console.WriteLine(num1.GetType()); // System.Int16
Console.WriteLine( (num1 - num2).GetType()); // System.Int32

如您所见,从另一个Int16中减去一个Int16实际上就是一个Int32。您无法将结果(没有明确的强制转换)分配回num2,因为它被定义为Int16。

如果您真的想分配回num2

,则使用显式强制转换解决它
num2 = (short)(num1-num2);

答案 1 :(得分:2)

两个变量都是short(System.Int16),但是在进行算术运算时,结果将是int(System.Int32),并且C#不会将int分配给short隐式(“不能将int隐式转换为short”),因为它可能会导致损失。

要解决此问题,请明确显示转换内容:

num2 = (short)(num1 - num2);