C# 如何返回一个可为null的类型作为方法输出?
这是我的代码,我试图返回temp,但它说不能隐式地将类型“int”转换为“int”。存在显式转换是否缺少强制转换C# 如何返回一个可为null的类型作为方法输出?,c#,C#,这是我的代码,我试图返回temp,但它说不能隐式地将类型“int”转换为“int”。存在显式转换是否缺少强制转换 public int? pop(int? i) { if (i == 1) { int j = (n/2); int? temp; bool flag1=true; while (j>=0) {
public int? pop(int? i)
{
if (i == 1)
{
int j = (n/2);
int? temp;
bool flag1=true;
while (j>=0)
{
if (dstack[j] != null)
{
temp = dstack[j];
dstack[j] = null;
flag1=false;
break;
}
j--;
}
if (flag1)
Console.WriteLine("stack 1 is empty:");
return temp;
}
}
将返回类型设为int?调整你的调用代码来处理一个空的返回类型,考虑它可能没有一个值:
public int? pop(int? i)
你现在犯的错误是有道理的
或者,返回temp.Value,即int,但如果temp真的为null,则需要确定默认值:
return temp.HasValue ? temp.Value : -1;
把temp设为int?实际上没有任何意义?。您不需要它,而且从方法签名的外观来看,您需要在调用方中使用int
您需要的是temp的默认值。因此,我最后的建议是选择一个对您有意义的默认值,并删除所有可为null的int。在C 8.0及更高版本中可用,您可以使用null合并运算符??并返回int值:
return temp ?? -1;
当不为null时返回temp,当temp为null时返回-1
有关的详细信息,方法签名表示要返回int。方法实现表示要返回int?。这两者不是一回事。您想做什么?如果您有特定于版本的问题,请使用特定于版本的标记,而不是在不确定版本时全部添加这些标记。@用户,现在您已经更改了方法的返回类型,您确定它会给您相同的错误吗?哪一行现在被突出显示为失败?@KirkWoll同一行,不同的错误仍然不起作用!现在有两个错误第二个说使用未分配的局部变量'temp'@user3927214:这个错误对你有什么启示吗?使用对算法有意义的值初始化temp。或者,删除null并使temp成为常规int。