从泛型类型调用方法



我将创建一个方法,用于解析来自控制台应用程序的输入,并在TryParse通过时返回值,否则继续询问。我将对charint变量使用相同的方法。正因为如此,我写了这个方法。

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 中引入(。

最新更新