Разрешение перегрузки метода с использованием динамического аргумента

На этот вопрос, возможно, уже был дан ответ. Я вижу много вопросов о «разрешении перегрузки динамического метода», но ни один из них не касается конкретно передачи динамического аргумента. В следующем коде в 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
}
  1. Почему, поскольку тип не известен статически, он не разрешается в перегрузке, принимающей динамически ?
  2. Может ли перегруженный метод использовать динамический ?
  3. Как лучше всего решить эту проблему?
8
задан Daniel 26 August 2011 в 20:47
поделиться