C # Generics Ограничения: Есть ли способ выразить это? - PullRequest
2 голосов
/ 18 октября 2010

У меня есть следующий код:

interface IConverter<T, U>
{
    U Convert(T obj);
}

interface IBusinessEntityConveter<T, U> : IConverter<T, U>
    where U : BusinessEntity
{
}

class LookupConveter<B> : IBusinessEntityConveter<Lookup, B>, IConverter<Lookup, Moniker>
    where B : BusinessEntity, new()
{

    #region IConverter<Lookup, Moniker> Members

    public Moniker Convert(Lookup obj)
    {
       //...
    }

    #endregion


    #region IConverter<Lookup,B> Members

    public B Convert(Lookup obj)
    {
       //...
    }

    #endregion
}

Я получаю эту ошибку:

Ошибка 2 'Convertors.LookupConveter<B>' не может реализовать оба 'Convertors.IConverter<Microsoft.Crm.Sdk.Lookup,B>' и 'Convertors.IConverter<Microsoft.Crm.Sdk.Lookup,Microsoft.Crm.Sdk.Moniker> 'потому что они могут объединяться для некоторых подстановок параметров типа

Есть ли способ указать, что T не является бизнес-сущностью?

Ответы [ 2 ]

7 голосов
/ 18 октября 2010

Нет, я боюсь, что нет.Единственные варианты, которые у вас есть, перечислены здесь Ограничения на параметры типа .В итоге это:

  • принудительное применение типа значения
  • принудительное применение ссылочного типа
  • принудительное применение не ссылочного типа, который не содержит ссылочных типов
  • применять открытый конструктор без параметров
  • применять определенный базовый класс
  • применять определенный интерфейс
  • применять тип происходит из аргумента
4 голосов
/ 18 октября 2010

Нет, «отрицательных» ограничений нет.

...