3
(Func<IInterface>)
と(Func<Task<IInterface>>)
のあいまいな呼び出しエラーが次のコードサンプルで発生するのはなぜですか?そして、メソッドグループコールを置き換えることなくこのエラーを回避するにはどうすればよいですか?より効率的な `か(実際にはわずか;`メソッド((機能
public class Program
{
public static void Main(string[] args)
{
Method(GetObject);
}
public static IInterface GetObject() => null;
public static void Method(Func<IInterface> func) =>
Console.WriteLine("First");
public static void Method(Func<Task<IInterface>> funcAsync) =>
Console.WriteLine("Second");
}
public interface IInterface { }
"修正" することを期待します'Method(()=> GetObject());' –
'GetObject'は、この呼び出しのメソッドグループであり、C#の中に一見存在する神秘的な生き物です。代理人に過負荷解決を引き出す](https://stackoverflow.com/questions/2057146/)。 (具体的には、「オーバーロードの解決では戻り値の型は考慮されません」) –
「メソッドグループ呼び出しを置き換えずに」質問を修正したので、答えは本当に単純な「できません」です。残された唯一のオプションは 'Method's(' MethodAsync'には素晴らしいリングがあります)の名前を変更して、最初に過負荷に遭遇しないようにすることです。 (私は、RoslynリポジトリでC#言語を変更することをお勧めしますが、成功のチャンスはそれほどありません)。オーバーロード解決は、メソッドグループを使用するときに、これらの2つのメソッドを区別できません。 –