C#中的泛型返回类型

Tec*_*Xie 13 c# generics

正在练习泛型.考虑下面的堆栈方法.除了在泛型方法中抛出异常之外,执行错误检查的最佳方法是什么.如果我想在此方法中返回一些结果,该怎么办?

public T pop()
{
    if (top >= 0)
        return arr[top--];
    return -1 or null;
}
Run Code Online (Sandbox Code Playgroud)

Tri*_*ian 15

您唯一能做的就是返回default(T),这是类型的默认值T(null对于引用类型,对于整数类型为零,对于其他值类型为零对象字段对象).但是,这通常是一个坏主意,因为您无法区分0弹出的弹出或0表示错误的弹出.在这种情况下,例外通常是最好的方法,但您也可以按如下方式更改方法:

public bool TryPop(out T value)
{
    if (top >= 0)
    {
        value = arr[top--];
        return true;
    }
    value = default(T);
    return false;
}
Run Code Online (Sandbox Code Playgroud)

  • @Edgar:真的不应该出乎意料.`out`关键字表示该方法必须为变量**分配一个新值.因此,如果你正在调用一个带有'out`参数的方法,你只需要知道你输入的任何内容的值*将会改变(这就是为什么提前为它赋值的实际上没有意义).不*可能*,但*会*. (3认同)

µBi*_*Bio 6

您可以这样做return default(T),它将返回0个初始化值类型(例如,所有数值类型将初始化为0),并且对于引用类型为null.