使用显式接口实现时冲突约束 'value' 和 'System.Enum'

Conflicting constraints 'value' and 'System.Enum' when using explicit interface implementation

我正在构建一个可扩展的系统,用于在各种枚举类型之间进行转换。这个想法是开发人员可以继承 BaseEnumConverter class 并提供抽象方法 Convert<TDestinationEnumType> 的实现。

此 Convert 方法随后将由内部系统调用。要求是这个方法的任何实现都将在一些验证逻辑之后直接自动调用。

我通过使用接口、私有方法和显式接口实现来强制执行此规则:

public interface IEnumConverter
{
    TDestinationEnumType? Convert<TDestinationEnumType>(Enum sourceEnumValue) where TDestinationEnumType : struct, Enum;
}

public abstract class BaseEnumConverter : IEnumConverter
{
    public abstract TDestinationEnumType? Convert<TDestinationEnumType>(Enum sourceEnumValue)
        where TDestinationEnumType : struct, Enum;

    private TDestinationEnumType? ConvertWithValidation<TDestinationEnumType>(Enum sourceEnumValue)
        where TDestinationEnumType : struct, Enum
    {
        if (sourceEnumValue.GetType() == typeof(TDestinationEnumType))
        {
            return (TDestinationEnumType)sourceEnumValue;
        }
        return Convert<TDestinationEnumType>(sourceEnumValue);
    }

    TDestinationEnumType? IEnumConverter.Convert<TDestinationEnumType>(Enum sourceEnumValue)
    {
        return ConvertWithValidation<TDestinationEnumType>(sourceEnumValue);
    }
}

这样,对 IEnumConverter 引用的任何调用都会自动 运行 验证逻辑,然后是转换逻辑。

问题

显式接口定义的签名有以下编译错误:

Type parameter 'TDestinationEnumType' inherits conflicting constraints 'value' and 'System.Enum'

删除 'struct' 约束确实会删除编译错误,但是它会阻止我从 Convert 方法返回空结果,这也是该系统的要求。

所以我想知道的是:

经进一步调查,这似乎是 ReSharper 的问题。