我正在对结构和运算符进行一些实验,遇到了一种我无法理解的情况。
我有一个仅包含的结构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一起出现此问题
汉斯·帕桑特(Hans Passant)发现这似乎是Visual Studio 2015错误
谢谢 ;)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句