我正在對結構和運算符進行一些實驗,並且遇到了我無法理解的情況。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年
我複製粘貼你的例子,不能重現。 –
我用VS 2015做了這個例子,並且VS 2015對我來說不起作用.. 我已經在VS 2013上測試過了,它按預期工作.. – BraCa
我正在使用VS2015,它工作正常。 –