Вы можете сделать это через промежуточный класс. Компилятор не будет выполнять два неявных приведения сам по себе, поэтому вы должны сделать одно явное приведение, а затем компилятор вычислит второе.
Проблема заключается в том, что при неявном приведении необходимо либо привести к, либо из типа, в котором вы объявили приведение, и вы не можете наследовать от запечатанных классов, таких как 'int'.
Так что это совсем не элегантно. Методы расширения, вероятно, более элегантны.
Если вы объявите класс ниже, вы можете делать такие вещи, как:
byte[] y = (Qwerty)3;
int x = (Qwerty) y;
public class Qwerty
{
private int _x;
public static implicit operator byte[](Qwerty rhs)
{
return BitConverter.GetBytes(rhs._x);
}
public static implicit operator int(Qwerty rhs)
{
return rhs._x;
}
public static implicit operator Qwerty(byte[] rhs)
{
return new Qwerty {_x = BitConverter.ToInt32(rhs, 0)};
}
public static implicit operator Qwerty(int rhs)
{
return new Qwerty {_x = rhs};
}
}
person
Dan Byström
schedule
23.01.2015