c# - 试图删除涉及 int 和 long 的构造函数中的不明确调用

标签 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);
}

最佳答案

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

关于c# - 试图删除涉及 int 和 long 的构造函数中的不明确调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28619083/

相关文章:

c# - 如何在Miniprofiler for asp.net core 2.0中禁用加载静态文件的显示

PHP 类和构造函数内的静态属性

java - 当我们尝试使用 'new' 创建原始数组对象时会调用哪个类构造函数

actionscript-3 - 舞台上的对象不会在构造函数之外初始化

c++ - 通过隐式转换小于运算符?

Scala:有没有一种方法可以将类型别名视为不同于它们别名的类型?

c# - BackgroundWorker 和 WebBrowser 控件

c# - JScript.NET 与 ECMA

c# - 初始化类的集合成员

c# - 无法将 Type<Food> 隐式转换为 My Type<IFood>