【问题标题】:The type 'XXX' cannot be used as type parameter 'T' in the generic type or method类型“XXX”不能用作泛型类型或方法中的类型参数“T”
【发布时间】:2017-05-25 22:24:28
【问题描述】:

我有以下课程

public interface IHtmlString
{
    string ToHtmlString();
}

public class BaseClass<T> where T : BaseClass<T>, IHtmlString
{
    public BaseClass()
    {
    }
    public T Method1()
    {
        return (T)this;
    }
    public T Method2(string key, object value)
    {
        return (T)this;
    }
    public string ToHtmlString()
    {
        return ToString();
    }
}

public class DerivedClassA : BaseClass<DerivedClassA>
{
    public DerivedClassA MethodSpecificToClassA()
    {
        return this;
    }
    public override string ToString()
    {
        return "<div/>";            
    }
}

public class DerivedClassB : BaseClass<DerivedClassB>
{
    public DerivedClassB MethodSpecificToClassB()
    {
        return this;
    }
    public override string ToString()
    {
        return "<span/>";
    }
}

请注意,该方法返回 this 实例,以便我可以链接方法,如下所示

 var a = new DerivedClassA()
        .Method1()
        .MethodSpecificToClassA()
        .ToHtmlString();

但是我得到编译时错误

严重性代码描述项目文件行抑制状态 错误 CS0311 类型“DerivedClassA”不能是 在泛型类型或方法中用作类型参数“T” '基类'。没有隐式引用转换 'DerivedClassA' 到 'System.Web.IHtmlString'。 WebApplication5 C:\MyProjects\WebApplication5\WebApplication5\Models\BaseBuilder.cs 27 活动

我如何重构这些类,所以我只有基类上的IHtmlString 接口?

【问题讨论】:

    标签: c# generics


    【解决方案1】:

    成功了

    public class BaseClass<T> : IHtmlString where T : BaseClass<T>
    {
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多