我是C#的新手,因此很抱歉提出这个可能很愚蠢的问题。但是,我找不到答案。减去整数时为什么会出现以下错误?
Console.WriteLine(num2.GetType()); // System.Int16
Console.WriteLine(num1.GetType()); // System.Int16
num2 = num1 - num2;
“ num1-num2”显示为红色下划线,并显示“无法将int隐式转换为short”
这是什么问题?
答案 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);