我创建了一个函数,只要它适合过滤器,就可以从用户那里获取控制台输入。
public delegate TResult OutFunc<in T, TValue, out TResult>(T arg1, out TValue arg2);
public static T PromptForInput<T>(string prompt, OutFunc<string, T, bool> filter)
{
T value;
do { Console.Write(prompt); }
while (!filter(Console.ReadLine(), out value));
return value;
}
当我像下面那样调用该方法时,这非常有效。只要它解析为一个数字,它就会从用户那里获取一个数字int
其范围为(0-10)。
int num = PromptForInput("Please input an integer: ",
delegate(string st, out int result)
{ return int.TryParse(st, out result) && result <= 10 && result >= 0; } );
我希望能够重复使用常见的过滤器。在我的程序的多个地方我想得到一个int
来自用户的输入,因此我将其逻辑分离出来,并将其放入其自己的函数中。
private bool IntFilter(string st, out int result)
{
return int.TryParse(st, out result) && result <= 10 && result >= 0;
}
现在,当我尝试执行此操作时出现错误:
int num = PromptForInput("Please input an integer: ", IntFilter);
无法从用法中推断出方法“PromptForInput(string, OutFunc)”的类型参数。尝试显式指定类型参数。
在这种情况下,如何显式指定类型参数?