Я разработал пользовательский целочисленный тип.Вот его определение в C #.
public struct PitchClass
{
private readonly int value;
private PitchClass(int value)
{
this.value = CanonicalModulus.Calculate(value, 12);
}
public static implicit operator PitchClass(int value)
{
return new PitchClass(value);
}
public static implicit operator PitchClass(double value)
{
return new PitchClass((int)Math.Round(value));
}
public static implicit operator int(PitchClass pitchClass)
{
return pitchClass.value;
}
}
PitchClass
- это int
, значения которого находятся в диапазоне [0, 11].
Как вы можете прочитать изВ коде C # значения int
и double
могут быть неявно преобразованы в PitchClass
с помощью оператора канонического модуля :
PitchClass pitchClass = -3;
Console.WriteLine(pitchClass); // 9
Значение double
также округляется во время неявногопреобразование:
PitchClass pitchClass = -3.4d;
Console.WriteLine(pitchClass); // 9
Я не смог найти других примеров пользовательских типов данных, которые так много делают с типом данных для преобразования.
Почему?Это плохая практика?Если да, есть ли другой способ избежать проверки аргументов для каждой переменной PitchClass в каждом методе?
Спасибо