这个问题可能之前已经有人回答过了。我看到很多关于“动态方法重载解析”的问题,但没有一个是特别涉及传递dynamic
参数的。在下面的代码中,在Test
方法中,最后一次对M
方法的调用无法被解析(它无法编译)。错误提示为:该调用在[M
的前两个重载方法]之间模棱两可。
static void M(Func<int> f) { }
static void M(Func<string> f) { }
static void M(Func<dynamic> f) { }
static dynamic DynamicObject() {
return new object();
}
static void Test() {
M(() => 0);
M(() => "");
M(() => DynamicObject()); //doesn't compile
}
- 为什么由于类型不是静态已知的,它不能解析为接受
dynamic
的重载? - 重载方法是否可能使用
dynamic
? - 解决这个问题的最佳方法是什么?
static void M<T>(Func<DataTime, T> f) where T : A
和static void M<T>(Func<DataTime, T> f) where T : B
,我认为这样就允许重载了?- 当然,在“Test”中的所有方法调用都应该没问题? - Smudge202