从泛型类型调用方法

时间:2019-04-04 17:24:12

标签: c# generics c#-7.0 c#-8.0

我将创建一个方法来解析来自控制台应用程序的输入,并在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。

1 个答案:

答案 0 :(得分:4)

目前,不使用反射就无法做到这一点。将来,C#可能可能会根据类型的运算符,静态方法和构造函数引入一种约束类型参数的方法-但是C#8预览版中没有任何内容(但我没有期望在C#8中引入它。