struct Equality operator Immediate Window 奇怪的行为
struct Equality operator Immediate Window weird behaviour
我正在用结构体和运算符做一些实验,我遇到了一个我无法理解的情况。
我有一个只包含 int
的结构。我还实现了 'implicit operator' 方法,因此我可以直接为其分配 int
并且我已经实现了等式运算符
一切似乎在运行时都运行良好,但如果我创建一个断点,并在立即 Window 中执行此 ((TestStruct)1) == ((TestStruct)1);
它 returns 错误,但在运行时它 returns 正确(如我所料)。
如果我在 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
Hans Passant 发现这似乎是一个 Visual Studio 2015 年的错误
谢谢 ;)
我正在用结构体和运算符做一些实验,我遇到了一个我无法理解的情况。
我有一个只包含 int
的结构。我还实现了 'implicit operator' 方法,因此我可以直接为其分配 int
并且我已经实现了等式运算符
一切似乎在运行时都运行良好,但如果我创建一个断点,并在立即 Window 中执行此 ((TestStruct)1) == ((TestStruct)1);
它 returns 错误,但在运行时它 returns 正确(如我所料)。
如果我在 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
Hans Passant 发现这似乎是一个 Visual Studio 2015 年的错误
谢谢 ;)