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

use*_*274 11 c# visual-studio visual-studio-2015

我的项目在VS 2013中编译,但不在VS 2015中编译.下面的代码重现了编译问题.Validator类实际上是在第三方程序集中,因此我无法更改实现.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>
{

}
Run Code Online (Sandbox Code Playgroud)

这个编译问题有解决方法吗?任何帮助,将不胜感激.

错误:

Severity  Code    Description                                                                                     Project  File        Line

Error     CS0534  'Required' does not implement inherited abstract member 'Validator<object>.DoValidate(object)'           Program.cs  38

Jak*_*rtz 2

我试图找到这种行为的原因,但失败了。

不过我确实找到了解决方法。您发布的代码在ValidatorBase<T>不抽象时编译。我知道你无法更改它,但你可以将另一个非抽象类添加到继承链中:

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

public class Required : Workaround<object>
{

}
Run Code Online (Sandbox Code Playgroud)

看起来 Roslyn 在定义非抽象派生类之前不会解析抽象类中重写的方法。