C# 如何返回一个可为null的类型作为方法输出?

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) {

这是我的代码,我试图返回temp,但它说不能隐式地将类型“int”转换为“int”。存在显式转换是否缺少强制转换

 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。