如何返回一个可空类型作为方法输出?

时间:2014-08-11 23:28:31

标签: c#

这是我的代码,我正在尝试返回temp,但它说“不能隐式转换类型'int?' to'int'.an显式转换存在(你错过了演员?)

 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;
        }
    }

2 个答案:

答案 0 :(得分:2)

返回类型int?并调整您的调用代码以处理可为空的返回类型(认为它可能没有值):

public int? pop(int? i)

你现在的错误是有道理的。

或者,返回temp.Value,这是一个int,但你需要决定一个默认值(如果temp真的是null):

return temp.HasValue ? temp.Value : -1;

将temp设为int?实际上没有任何意义。您没有用它,并且通过方法签名的外观,您需要在调用者中使用int

您需要的是temp的默认值。所以我的最后建议是选择一个对你有意义的默认值并删除所有可为空的整数。

答案 1 :(得分:0)

在C#8.0和更高版本中可用,您可以使用null运算符??并返回int值:

return temp ?? -1;

如果不为null,则返回temp;如果temp为null,则返回-1。

有关Microsoft documentation

的更多信息