从泛型类型调用方法
Call a method from a generic type
我将创建一个方法来解析来自控制台应用程序的输入,如果 TryParse
通过,则 return 返回值,否则继续询问。我将对 char
和 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
is a type parameter, which is not valid in the given context
我该如何解决这个问题?我知道 TResult
没有方法 TryParse
但我不知道如何让编译器相信总会有一个 TryParse
。我可以用模式匹配解决这个问题吗?
P.S.:我正在制作 C#8 的演示,欢迎使用 C#8。
目前,如果不使用反射,就无法做到这一点。有可能在未来,C# 可能 引入一种根据它们具有的运算符、静态方法和构造函数来约束类型参数的方法——但 C# 8 预览版中没有任何内容(而且我我没想到它会在 C# 8 中引入。
我将创建一个方法来解析来自控制台应用程序的输入,如果 TryParse
通过,则 return 返回值,否则继续询问。我将对 char
和 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
is a type parameter, which is not valid in the given context
我该如何解决这个问题?我知道 TResult
没有方法 TryParse
但我不知道如何让编译器相信总会有一个 TryParse
。我可以用模式匹配解决这个问题吗?
P.S.:我正在制作 C#8 的演示,欢迎使用 C#8。
目前,如果不使用反射,就无法做到这一点。有可能在未来,C# 可能 引入一种根据它们具有的运算符、静态方法和构造函数来约束类型参数的方法——但 C# 8 预览版中没有任何内容(而且我我没想到它会在 C# 8 中引入。