1

我正在对结构和运算符进行一些实验,但遇到了我无法理解的情况。

我有一个只包含一个int. 我还实现了“隐式运算符”方法,因此我可以int直接为其分配一个,并且我已经实现了平等运算符

一切似乎在运行时都运行良好,但是如果我创建断点并((TestStruct)1) == ((TestStruct)1);在即时窗口中执行它,它会返回 false,但在运行时它会返回 true(正如我所期望的那样)。

如果我在 Equality 运算符上放置另一个断点,我可以看到其中的代码正在执行,但我的结构的值不是我期望的“1”,而是一些随机的。

这是我的示例代码:

class Program
{
    static void Main(string[] args)
    {
        bool areEqual = ((TestStruct)1) == ((TestStruct)1);
        string breakPoint = ";)";
    }
}

struct TestStruct
{
    private Int32 value;
    public TestStruct(Int32 value)
    {
        this.value = value;
    }

    static public implicit operator TestStruct(Int32 value)
    {
        return new TestStruct(value);
    }

    public static bool operator ==(TestStruct ptr1, TestStruct ptr2)
    {
        return ptr1.value == ptr2.value;
    }
    public static bool operator !=(TestStruct ptr1, TestStruct ptr2)
    {
        return ptr1.value != ptr2.value;
    }
}

编辑如果与 VS 2013 一起使用,它似乎工作正常,这个问题似乎只发生在 VS 2015 上

示范

4

1 回答 1

0

Hans Passant 发现这似乎是 Visual Studio 2015 的错误

谢谢 ;)

于 2015-11-30T20:46:01.687 回答