Альтернатива ковариации для silverlight 4.0 IEnumerable <T> - PullRequest
1 голос
/ 20 декабря 2011

Я использую Silverlight 4.0 в своем приложении.У меня есть метод в моем базовом классе, как упомянуто ниже

class BaseClass
{
    protected CustomRequest GetCustomRequest(IEnumerable<IRequestType> types)
    {
        //Some code here...
    }
}

В моем производном классе, когда я вызываю этот метод, как показано ниже, я получаю ошибку

IEnumerable<RequestType> requestTypes = CodeToGetThis();
GetCustomRequest(requestTypes)

Обратите внимание, что в операторе вызоваТип requestTypes - это перечисляемый производный тип IRequestType .

. Это хорошо работает в настольных приложениях благодаря введению ковариации в c # 4.0.Но кажется, что для silverlight 4.0 это не сделано для интерфейса IEnumerable.

Так какой же лучший альтернативный подход я должен использовать в своем приложении silverlight для этого?

Я где-то читал, что он можетбыть сделано с использованием перегрузки методов, но не уверен, как это сделать.

ОБНОВЛЕНИЕ: Одна вещь, которую я пропустил в первом наброске вопроса, состоит в том, что у меня будет много производных типов IRequestType, поэтому я буду стремитьсяперегруженный метод для каждого производного типа будет проблемой для меня.

1 Ответ

1 голос
/ 20 декабря 2011

Просто приведите каждый элемент к интерфейсу, например,

IEnumerable<IRequestType> requestTypes = CodeToGetThis().Select(x => (IRequestType)x);
GetCustomRequest(requestTypes)

Вы могли бы что-то сделать с перегрузкой метода и иметь метод, который принял ваш производный / конкретный тип, но в итоге вы бы только сделали что-то подобное выше и вызвали оригинальный метод в перегрузке.

...