«Вызов неоднозначен между следующими методами или свойствами: «fInt.fInt(int, bool)» и «fInt.fInt(long, bool)»
Вот мои два конструктора:
public fInt(int i, bool scale = true)
{
if (scale) value = i * SCALE;
else value = i;
}
public fInt(long i, bool scale = true)
{
if (scale)
{
if(i > long.MaxValue / SCALE || i < long.MinValue / SCALE)
Debug.LogError("fInt Overflow on creation with scaling");
value = i * SCALE;
}
else value = i;
}
Вот как я вызываю его с помощью int, используя неявное преобразование:
fInt i = 8;
Я хотел бы иметь возможность использовать как int, так и long, чтобы избежать дополнительной проверки, если она не нужна. Любые мысли о том, как это исправить? Должен ли я просто сделать это:
fInt i = (int)8;
fInt i2 = (long)9;
Я бы предпочел не иметь лишнего набора текста, если я могу этого избежать. Вот мои неявные преобразования:
//implicit int to fInt
public static implicit operator fInt(int i)
{
return new fInt(i);
}
//implicit long to fInt
public static implicit operator fInt(long i)
{
return new fInt(i);
}