C# 代表';系统功能<;int,int,string>';不接受1个参数

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

我在stackoverflow上看到了一些类似问题的解决方案,但看起来每个问题都是独一无二的


我试图实现全局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”,你根本不应该这样做。您应该只捕获一个可以合理处理的异常。读一读埃里克·利珀特的书。