C# 代表';系统功能<;int,int,string>';不接受1个参数
我在stackoverflow上看到了一些类似问题的解决方案,但看起来每个问题都是独一无二的C# 代表';系统功能<;int,int,string>';不接受1个参数,c#,linq,lambda,C#,Linq,Lambda,我在stackoverflow上看到了一些类似问题的解决方案,但看起来每个问题都是独一无二的 我试图实现全局try/catch,而不是在每个方法上编写try/catch,但我遇到了这个错误。它对一个参数有效,而对接受多个参数的方法无效 class Program { static void Main(string[] args) { int i = 5; int j = 10; s
我试图实现全局try/catch,而不是在每个方法上编写try/catch,但我遇到了这个错误。它对一个参数有效,而对接受多个参数的方法无效
class Program
{
static void Main(string[] args)
{
int i = 5;
int j = 10;
string s1 = GlobalTryCatch(x => square(i), i);
string s2 = GlobalTryCatch(x => Sum(i,j), i, j); // error here..
Console.Read();
}
private static string square(int i)
{
Console.WriteLine(i * i);
return "1";
}
private static string Sum(int i, int j)
{
Console.WriteLine(i+j);
return "1";
}
private static string GlobalTryCatch<T1>(Func<T1, string> action, T1 i)
{
try
{
action.Invoke(i);
return "success";
}
catch (Exception e)
{
return "failure";
}
}
private static string GlobalTryCatch<T1, T2>(Func<T1, T2, string> action, T1 i, T2 j)
{
try
{
action.Invoke(i, j);
return "success";
}
catch (Exception e)
{
return "failure";
}
}
}
类程序
{
静态void Main(字符串[]参数)
{
int i=5;
int j=10;
字符串s1=全局捕获(x=>平方(i),i);
字符串s2=GlobalTryCatch(x=>Sum(i,j),i,j);//此处出错。。
Console.Read();
}
专用静态字符串平方(int i)
{
控制台写入线(i*i);
返回“1”;
}
私有静态字符串和(inti,intj)
{
控制台写入线(i+j);
返回“1”;
}
私有静态字符串GlobalTryCatch(Func操作,T1 i)
{
尝试
{
行动.援引(i);
返回“成功”;
}
捕获(例外e)
{
返回“失败”;
}
}
私有静态字符串GlobalTryCatch(Func操作,T1 i,T2 j)
{
尝试
{
行动.援引(i,j);
返回“成功”;
}
捕获(例外e)
{
返回“失败”;
}
}
}
< /代码> 您可能需要考虑处理事件并处理异常。
您的方法签名不同。这就是为什么不能使用GlobalTryCatch的单个实现 > P>您可能需要考虑处理事件并在其中处理异常。
string s2 = GlobalTryCatch((x, y) => Sum(i, j), i, j);
您的方法签名不同。这就是为什么不能使用GlobalTryCatch的单个实现
string s2 = GlobalTryCatch((x, y) => Sum(i, j), i, j);
编译器无法将原始方法与字符串GlobalTryCatch(Func action,T1 i)
匹配,因为lambda表达式只有一个参数,但方法签名调用两个参数。修复方法是使用(x,y)
,这表示lambda使用两个参数
作为快捷方式,您可以只提供“方法组”,这将导致以下结果:
string s2 = GlobalTryCatch(Sum, i, j);
编译器无法将原始方法与字符串GlobalTryCatch(Func action,T1 i)
匹配,因为lambda表达式只有一个参数,但方法签名调用两个参数。修复方法是使用(x,y)
,这表示lambda使用两个参数
作为快捷方式,您可以只提供“方法组”,这将导致以下结果:
string s2 = GlobalTryCatch(Sum, i, j);
您可以像这样提供双参数Func
string s2 = GlobalTryCatch(Sum, i, j); // error here..
无需添加lambda表达式。您可以像这样提供双参数函数
string s2 = GlobalTryCatch(Sum, i, j); // error here..
不需要添加lambda表达式。我遇到了这个错误
那是什么错误?它给出了编译器错误“Delegate”System.Func“不接受1个参数”“我正在尝试实现全局try/catch,而不是在每个方法上编写try/catch”。这些都没有任何意义。第一种方法对于除了日志记录之外的任何东西都是毫无意义的,因为它太笼统了,无法处理出了什么问题。后者太宽了,因为大多数调用都不应该抛出,而许多调用最好通过让它依次传递给调用方来处理。“与其在每个方法上都编写try/catch”,你根本不应该这样做。您应该只捕获一个可以合理处理的异常。请阅读Eric Lippert的。我被这个错误缠住了
那是什么错误?它给出了编译器错误“Delegate”System.Func“不接受1个参数”“我正在尝试实现全局try/catch,而不是在每个方法上编写try/catch”。这些都没有任何意义。第一种方法对于除了日志记录之外的任何东西都是毫无意义的,因为它太笼统了,无法处理出了什么问题。后者太宽了,因为大多数调用都不应该抛出,而许多调用最好通过让它依次传递给调用方来处理。“与其在每个方法上都编写try/catch”,你根本不应该这样做。您应该只捕获一个可以合理处理的异常。读一读埃里克·利珀特的书。