CS0425 de erro do compilador

Mensagem de erro

As restrições de parâmetro de tipo 'tipo de parâmetro' do método 'method' devem coincidir com as restrições de parâmetro 'tipo de parâmetro de tipo' de 'method' método de interface.Considere o uso de uma implementação explícita da interface.

Este erro ocorre se um método genérico virtual é substituído em uma classe derivada e as restrições no método na classe derivada não coincidem com as restrições no método na classe base.Para evitar esse erro, verifique se o where cláusula é idêntica nas declarações ou implementar interface explicitamente.

Exemplo

O exemplo a seguir gera CS0425:

// CS0425.cs

class C1
{
}

class C2
{
}

interface IBase
{
    void F<ItemType>(ItemType item) where ItemType : C1;
}

class Derived : IBase
{
    public void F<ItemType>(ItemType item) where ItemType : C2  // CS0425
    {
    }
}

class CMain
{
    public static void Main()
    {
    }
}

sistema autônomo restrições não são necessário ser uma correspondência literal, desde que o conjunto de restrições tem o mesmo significado.Por exemplo, este é correto:

// CS0425b.cs

interface J<Z>
{
}

interface I<S>
{
    void F<T>(S s, T t) where T: J<S>, J<int>;
}

class C : I<int>
{
    public void F<X>(int s, X x) where X : J<int>
    {
    }

    public static void Main()
    {
    }
}