2015-11-28 68 views
1

我正在對結構和運算符進行一些實驗,並且遇到了我無法理解的情況。struct平等運算符立即窗口奇怪行爲

我有一個結構,只包含一個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年

Demonstration

+0

我複製粘貼你的例子,不能重現。 –

+0

我用VS 2015做了這個例子,並且VS 2015對我來說不起作用.. 我已經在VS 2013上測試過了,它按預期工作.. – BraCa

+1

我正在使用VS2015,它工作正常。 –

回答

0

出現這似乎是Hans Passant發現的Visual Studio 2015 bug

謝謝;)

+0

固定在VS2015更新1,發佈幾乎在同一時間發佈此答案:) –