Возможно, на это уже был дан ответ. Я вижу много вопросов о «разрешении перегрузки динамического метода», но ни один из них не связан с передачей аргумента 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
должны быть в порядке? - person Smudge202   schedule 27.08.2011dynamic
перегруженному методу. Как это лучше решить? - person Daniel   schedule 27.08.2011object
. См. рабочий пример Тиграна. - person Daniel   schedule 27.08.2011