代码之家  ›  专栏  ›  技术社区  ›  the_drow

C#泛型约束:有没有一种方法来表示不是a?

  •  2
  • the_drow  · 技术社区  · 14 年前

    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
    }
    

    我得到这个错误:

    Convertors.LookupConveter<B> ' 不能同时实现 ' Convertors.IConverter<Microsoft.Crm.Sdk.Lookup,B> ' ' Convertors.IConverter<Microsoft.Crm.Sdk.Lookup,Microsoft.Crm.Sdk.Moniker> ' 因为他们可能会为某种类型 参数 替换

    有没有办法说明它不是一个商业实体?

    2 回复  |  直到 14 年前
        1
  •  7
  •   Ian    7 年前

    不,恐怕不行。这里列出了你唯一的选择 Constraints on Type Parameters . 总之,这些是:

    • 强制值类型
    • 强制引用类型
    • 强制非引用类型,该类型不包含引用类型
    • 强制使用公共无参数构造函数
    • 强制特定基类
    • 强制特定接口
    • 强制类型派生自参数
        2
  •  4
  •   Jon Skeet    14 年前