首页 > 解决方案 > 如何在静态泛型方法中为 T 设置默认类型?

问题描述

我正在使用自己的自定义堆栈类,并且正在尝试创建一个通用方法来创建新堆栈(通用对象)。我经常使用 int 类型的堆栈,只是偶尔需要其他类型。我可以将 T 的默认类型设置为 int 吗?

这是方法:

public static Stack<T> newStack<T>(int length)
{
    Stack<T> s = new Stack<T>();
    for (int i = 0; i < length; i++)
    {
        Console.WriteLine("print num");
        string input = Console.ReadLine();
        T value = (T)Convert.ChangeType(input, typeof(T));
        s.Push(value);
    }
    return s;
}

我想使用这样的方法:

newStack(5);//defult int type

对于任何其他类型

newStack<string>(5)

有人可以帮忙吗?谢谢。

标签: c#generics

解决方案


您不能为 T 指定默认类型,但是您可以简单地重载该newStack方法以获得所需的行为。重载的方法会自动创建一个新的栈类型int

您的代码将如下所示:

public static Stack<T> newStack<T>(int length)
{
    Stack<T> s = new Stack<T>();
    for (int i = 0; i < length; i++)
    {
        Console.WriteLine("print num");
        string input = Console.ReadLine();
        T value = (T)Convert.ChangeType(input, typeof(T));
        s.Push(value);
    }
    return s;
}

public static Stack<int> newStack(int length)
{
    // Call our original new stack method but pass
    // integer as the type T
    return newStack<int>(length);
}

现在,如果您只想创建一个整数类型的新堆栈,则可以调用第二种方法,如下所示:

newStack(5);

否则,您可以使用以下方法创建其他类型的堆栈:

newStack<string>(5);

推荐阅读