是否可以重载具有相同名称的Func <T,TResult>和Func <T1,T2,TResult>?

Erh*_*ung 3 c# delegates overloading func

首先,我知道我可以定义两个重载的辅助方法来做我需要的东西(或者甚至只是用不同的名称定义两个Func <>),但这些只用于一个公共方法,所以我正在探索方法定义两个本地Func <>,它们也使用相同的名称重载.举个例子:

string DisplayValue(int value)
{ return DisplayValue(value, val => val.ToString()); }

string DisplayValue(int value, Func<int, string> formatter)
{ return (value < 0) ? "N/A" : formatter(value); }
Run Code Online (Sandbox Code Playgroud)

我需要在我的公共方法中多次调用一个或另一个版本来自定义格式化特殊值,所以我想我可以将上面的"翻译"成这样的东西:

Func<int, Func<int, string>, string> displayValue =
    (value, formatter) => (value < 0) ? "N/A" : formatter(value);

Func<int, string> displayValue =
    value => displayValue(value, val => val.ToString());
Run Code Online (Sandbox Code Playgroud)

即使在我输入它时,我也知道我无法声明两个具有相同名称的委托标识符,即使它们是不同的类型.这比使用Func <> s实现重载的死机更为学术,但我猜他们不能做任何事情,对吧?

而且我想你不能做这样的事情:

Func<string, params object[], string> formatArgs =
    (format, args) => string.Format(format, args);
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 6

不,你不能超载变量.这是你想要做的.

它仅仅来自用例:

 DisplaywWithoutFormatter(displayValue);
 DisplaywWithFormatter(displayValue);
Run Code Online (Sandbox Code Playgroud)

由于没有涉及参数,编译器无法可靠地区分这两者.