Как указать два общих параметра для метода расширения в C # - PullRequest
0 голосов
/ 22 февраля 2011

Я пытаюсь написать метод расширения со следующей подписью

public static D GetModelFor<S, D>(this S source) 
            where S : BusinessBase

У меня следующий класс

public class Order : BusinessBase

Я хочу иметь возможность вызывать метод расширения в экземпляреКласс заказа как

Order o = new Order();
SomeOtherClass s = o.GetModelFor<SomeOtherClass>();

Но это не работает.Компилятор C # просит меня указать оба типа S и D. В этом случае Order и SomeOtherClass.Я что-то здесь не так делаю?

======== Подробнее о внутренней реализации =========

    public static D GetModelFor<S, D>(this S source) 
        where D : IMappingProvider, new()
    {
        D d = new D();
        d.CreateMap();
        return Mapper.Map<S, D>(source);
    }

Здесь IMappingProvider isинтерфейс, который дает классу способ зарегистрировать карты для автоматического отображения.Как видите, мне нужно набрать S для использования в Mapper.Map<>

Ответы [ 2 ]

0 голосов
/ 23 февраля 2011

Я что-то здесь не так делаю?

Да - если вы указываете какие-либо параметры типа, вы должны указать их все.

Order o = new Order();
SomeOtherClass s = o.GetModelFor<Order, SomeOtherClass>();
SomeOtherClass s2 = o.GetModelFor<BusinessBase, SomeOtherClass>();
0 голосов
/ 22 февраля 2011

Есть ли причина не просто делать

public static T GetModelFor<T>(this BusinessBase source)

...