c# - 从泛型类型调用方法
问题描述
我将创建一个方法来解析来自控制台应用程序的输入并在TryParse
通过时返回值,否则继续询问。我将对 achar
和int
变量使用相同的方法。正因为如此,我写了这个方法。
int a = GetInput<int>("a");
char operation = GetInput<char>("operation");
int b = GetInput<int>("b");
private static TResult GetInput<TResult>(string variable)
{
Console.Write($"Enter {variable}: ");
if (TResult.TryParse(Console.ReadLine(), out TResult input))
// ^^^^^^^^
{
return input;
}
Console.WriteLine("Invalid input.");
return ReadInteger<TResult>(variable);
}
但是我在调用的行上遇到了这个错误TryParse
:
TResult
是一个类型参数,在给定的上下文中是无效的
我怎么能解决这个问题?我知道TResult
没有方法TryParse
,但我不知道如何让编译器相信总会有一个TryParse
. 我可以用模式匹配解决这个问题吗?
PS:我正在制作 C#8 的演示,所以欢迎使用 C#8。
解决方案
目前,如果不使用反射,就无法做到这一点。将来,C#可能会引入一种约束类型参数的方式,即它们所具有的运算符、静态方法和构造函数 - 但 C# 8 预览版中没有任何内容(我不希望它会在 C# 中引入) 8)。
推荐阅读
- python - 如何在另一个工作结束后运行 abaqus 工作?
- java - 使用通用自定义类时出现 ClassCastException
- php - 数组分组和计数php
- ios - UICollectionView 中的图像不显示更改
- c++ - SFML RenderWindow 需要很长时间才能打开一个窗口
- arrays - 如何从 Microsoft 认知服务的响应中获取价值
- ruby - 项目在一台计算机上运行,但在另一台计算机上运行
- python - 为什么 math.isclose() 无法检测到非常大的值之间的微小差异?
- swift - Swift 类型检查器拒绝将具有类要求的协议作为类类型
- python - 在 Tensorflow 中使用 TPU 时,在本地驱动器中保存检查点是否有一个不错的解决方法?