我有一个通用的基础来代表某种数字。我需要覆盖一些内置类型的隐式转换(如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>