无法传递委托

2023-12-21

我创建了一个函数,只要它适合过滤器,就可以从用户那里获取控制台输入。

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)”的类型参数。尝试显式指定类型参数。

在这种情况下,如何显式指定类型参数?


您有一个泛型函数,因此需要声明类型:

int num = PromptForInput<int>("Please input an integer: ", IntFilter);

编译器只是说它无法自己解决这个问题,需要显式声明它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法传递委托 的相关文章

随机推荐