struct Equality operator立即窗口奇怪的行为

时间:2015-11-28 13:57:47

标签: c# struct operator-overloading immediate-window

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

我有一个只包含int的结构。我还实现了“隐式运算符”方法,因此我可以直接为其分配int并实现了Equality运算符

在运行时似乎一切正常,但如果我创建一个断点,并在立即窗口中执行此((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上

Demonstration

1 个答案:

答案 0 :(得分:0)

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

谢谢;)