带有泛型参数的C#Generic Method,其类型与类上使用的类型不同

时间:2016-11-27 19:30:19

标签: c# generics implicit-conversion

我有一个通用的基础来代表某种数字。我需要覆盖一些内置类型的隐式转换(如short,ushort,int,uint等)。一种可能的方法是覆盖每个可能的类型,如下面的代码所示:

public class MyBaseClass<T> 
     where T : struct, IComparable, IComparable<T>, IEquatable<T>
{
     private T _value;

     public MyBaseClass(T value)
     {
        _value = value;
     }

     // Implicit Conversions
     static public implicit operator MyBaseClass<T>(Int16 value) 
            => new MyBaseClass<T>((dynamic)value);

     static public implicit operator MyBaseClass<T>(UInt16 value) 
            => new MyBaseClass<T>((dynamic)value);

     static public implicit operator MyBaseClass<T>(Int32 value) 
            => new MyBaseClass<T>((dynamic)value);

     // ... some more implicit conversions...
}

问题是:不是必须为每一个可能的选项做,有没有办法只用下面的东西做一次:

static public implicit operator MyBaseClass<T>(U value) where U: struct 
          => new MyBaseClass<T>((dynamic)value);

我尝试使用和不使用部分,其中T:struct ,但没有占优势。

有什么想法吗?

PS:以上代码是使用 Visual Studio代码 Mac / p>

0 个答案:

没有答案