试图删除涉及int和long的构造函数中的模糊调用

时间:2015-02-19 23:32:30

标签: c# constructor implicit-conversion ambiguity ambiguous

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

1 个答案:

答案 0 :(得分:0)

它似乎是Unity3D编辑器中的一个错误...因为代码在Visual Studio中运行良好。当第二个参数是可选的时,它只会混合签名。