【发布时间】:2012-01-09 01:57:48
【问题描述】:
我想对于我要写的内容,我应该首先澄清一下,这不是我想要实现的目标。这是发生在我身上的事情,我正在尝试了解它是如何可能的,所以我可以解决它。所以我们开始...
我正在使用 C#、.Net 4.0。代码很大,太大了,无法在这里全部列出,但我尝试解释发生了什么,希望有知识渊博的人有一些想法。
在我的调用堆栈中,我有一系列通用方法,我注意到虽然值应该只是从一个传递到另一个,但它正在发生变化。好吧,这是我的第一印象。后来我设法隔离了一种有问题的方法,当我停下来时,我可以看到对象的同一属性有两个不同的值。
public class Sample : BaseClass, ISomeInterface
{
[XmlIgnore]
public new Guid Id { get; set; }
}
BaseClass 和 ISomeINterface 定义的重要意义
public Guid Id
所以现在,当我停止在该通用方法中并观察 Sample 类型的变量 data 时,我可以展开它的属性并查看 Id。但是当我观看 data.Id 时,它显示出不同的价值。看看你自己。
(这是一张我无法发布的图片,因为名声微不足道。抱歉)
编辑:我把它推到了http://picturepush.com/public/7307446
有没有人知道Watch 窗口中这些值的获取方式有何不同?有什么区别?我尝试了许多不同的方法,铸造,使用反射,但我得到的值总是与你观看 data.Id 时的值相同,具有讽刺意味的是,正确的值,我期望的是另一个,难以捉摸的值。
哦,不,这不是家庭作业;)
【问题讨论】:
-
请把图片上传到其他地方。
-
BaseClass 是什么样的?当您查看值是 Sample 类实例转换为 Sample Class 还是 BaseClass 时?
-
属性是否用 DebuggerDisplayAttribute 修饰?当您在调试器中展开对象时,您可以显示与您看到的不同的值。
-
图片上传link我已经尝试转换为所有可能的类型无济于事,值总是相同的属性没有用DebuggigerDisplayAttribute修饰但是再次通过代码我注意到ValueInjector之前用于从不同的对象复制值。会不会有副作用?
标签: c# .net visual-studio-debugging