C# 当泛型类型匹配采用该类型的重载方法时,Visual Studio 2015不会编译

C# 当泛型类型匹配采用该类型的重载方法时,Visual Studio 2015不会编译,c#,visual-studio,visual-studio-2015,C#,Visual Studio,Visual Studio 2015,我的项目在VS 2013中编译,但在VS 2015中未编译。下面的代码再现了编译问题。验证器类实际上位于第三方程序集中,因此我无法更改实现。require类是一个本地类,但我不想更改实现,因为我必须更改很多验证逻辑。下面是VS 2015中未编译的代码 public abstract class Validator<T> : Validator { public override void DoValidate(object objectToValidate) {

我的项目在VS 2013中编译,但在VS 2015中未编译。下面的代码再现了编译问题。验证器类实际上位于第三方程序集中,因此我无法更改实现。require类是一个本地类,但我不想更改实现,因为我必须更改很多验证逻辑。下面是VS 2015中未编译的代码

public abstract class Validator<T> : Validator
{
    public override void DoValidate(object objectToValidate)
    {

    }
    protected abstract void DoValidate(T objectToValidate);
}

public abstract class Validator
{
    public abstract void DoValidate(object objectToValidate);
}

public abstract class ValidatorBase<T> : Validator<T>
{
    protected override void DoValidate(T objectToValidate)
    {

    }
}

public class Required : ValidatorBase<object>
{

}
公共抽象类验证器:验证器
{
公共重写void DoValidate(对象objectToValidate)
{
}
受保护的抽象void DoValidate(T objectToValidate);
}
公共抽象类验证器
{
公共抽象void DoValidate(objectobjecttovalidate);
}
公共抽象类验证器库:验证器
{
受保护的重写void DoValidate(T objectToValidate)
{
}
}
必需的公共类:ValidatorBase
{
}
这个编译问题有解决办法吗?任何帮助都将不胜感激

错误:

Severity Code Description Project File Line Error CS0534 'Required' does not implement inherited abstract member 'Validator<object>.DoValidate(object)' Program.cs 38 严重性代码说明项目文件行 错误CS0534“必需”未实现继承的抽象成员“Validator.DoValidate(object)”Program.cs 38
我试图找出这种行为的原因,但失败了

不过我确实找到了一个解决办法。您发布的代码在
ValidatorBase
不是抽象代码时编译。我知道您不能更改它,但您可以向继承链添加另一个非抽象类:

public class Workaround<T> : ValidatorBase<T> { }

public class Required : Workaround<object>
{

}
公共类解决方法:ValidatorBase{}
必需的公共类:解决方法
{
}

在定义非抽象派生类之前,Roslyn似乎不会解析抽象类中被重写的方法。

ValidatorBase无论如何都是无用的。摆脱它。我已经添加了一个错误。在VS2013中编译但在VS2015中不编译的东西是一个bug,不管怎样-它们非常严肃地对待向后兼容性。你在那里找到了一个漂亮的角落箱子。有人应该检查这是否已经报告,并在必要时报告。@它将为
验证程序
声明为抽象的方法提供一个具体的实现(
重写
)。其他类(上面未显示)也可以从
验证器
派生,并提供该方法的不同实现。因此,
ValidatorBase
非常有用。(当然,在上面的示例中,所有的主体都是空的,但是我们可以假设,在真实场景中,一些逻辑实际上在那里;它只是被询问者删掉,以提供一个最小的示例来重现编译器错误。我们还可以假设所有类都贡献了其他成员,上面没有显示。)@Lucastzesniewski这里有一个记录了这个bug的报告:很好,它回答了我在对这个问题的评论中提出的问题。@JeppeStigNielsen我现在看到你在评论中发布了完全相同的内容。你怎么知道这会有帮助?我偶然遇到了这个解决方案,我真的很感兴趣到底发生了什么。