c# - 如何在静态泛型方法中为 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)
有人可以帮忙吗?谢谢。
解决方案
您不能为 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);
推荐阅读
- python - 在 ndarrays 中查找最接近零的值
- json - 使用连接运行 json 的正确包?
- java - 获取异常“java.lang.NoSuchMethodError:org.openqa.selenium.WebElement.getDomAttribute(Ljava/lang/String;)Ljava/lang/String;” 在硒 4
- javascript - Javascript 如果可以打开应用程序的自定义 URL,而不是切换显示:阻止
- svn - svn up 不更新特定文件夹
- r - 如何管理用于图形目的的日期格式?
- terminal - 重命名子目录中的所有 .pdf 文件
- java - 我们如何使用 Wicket Web 框架将列从一个位置移动到另一个位置
- awk - NF,NR & i++ 在这个命令中的作用是什么?
- spring - 保存,预览/编辑(当用户注销并再次登录时)的最佳方法是什么,在 Spring 中提交表单数据