我想写一个通用方法,它允许我使用一个测试方法模式,它返回一个带有结果的布尔值并输出一个字符串消息:
public delegate bool TestMethodDelegate<string, bool>(out string message);
我在静态类中使用它(并在该类中声明):
public static void ExecuteTestMethodDelegate(TestDelegate<string, bool> aTestMethod)
{
// do repeated stuff before
string message;
bool result = aTestMethod(out message);
// do repeated stuff after
}
现在我想从代码中的多个位置调用此方法,但无法正确使用...尝试了几个选项,例如:
string message;
CommonTests.ExecuteTestMethodDelegate(() => return IsAppInstalled(out message));
毋庸置疑,这不会编译......任何帮助都将受到赞赏。
答案 0 :(得分:2)
您需要从委托中删除通用参数:
public delegate bool TestMethodDelegate(out string message);
和
public static void ExecuteTestMethodDelegate(TestMethodDelegate aTestMethod) { .. }
答案 1 :(得分:1)
委托可以包含类型参数,但是你拥有的是无效的 - 你不能指定它,它应该声明:
public delegate bool TestMethodDelegate(out string message);
执行:
CommonTests.ExecuteTestMethodDelegate(IsAppInstalled);
如果您希望从静态方法输出消息并返回结果,则必须更改静态方法的签名:
public static bool ExecuteTestMethodDelegate(TestMethodDelegate method, out string message)
{
// do repeated stuff before
bool result = method(out message);
// do repeated stuff after
return result;
}
答案 2 :(得分:1)
它不允许写:
public delegate bool TestMethodDelegate<string, bool>(out string message);
因为您尝试使用string
和bool
作为类型来声明通用委托。那么:
public delegate bool TestMethodDelegate<T>(out T message);
和
public static void ExecuteTestMethodDelegate(TestDelegate<string> aTestMethod)
{
string message;
bool result = aTestMethod(out message);
}
所以你可以这样做:
CommonTests.ExecuteTestMethodDelegate(IsAppInstalled);
但是你可以看到你不能在这里使用message
。所以一个非常简单的解决方案可能是:
public static void ExecuteTestMethodDelegate(TestMethodDelegate<string> aTestMethod, out string aParameter){
bool result = aTestMethod(out aParameter);
}
然后:
string message;
CommonTests.ExecuteTestMethodDelegate(IsAppInstalled, out message);