“以下方法或属性之间的调用不明确:'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);
}

最佳答案

它似乎是Unity3D编辑器中的错误……因为代码在Visual Studio中可以正常运行。仅在第二个参数为可选参数时才混合签名。

09-11 19:14