在C#中显示引用地址(调试WCF)
我正在调试一个具有双向通信的WCF项目。我有一个回调,其中包含存储在数组中的数据—客户端、WinForm,并使用它绘制控件。正如您所猜测的,从写入数组(实际上是一个列表)到读取数据,数据都会消失 对于调试,我想看看我是否正在写入和读取同一个对象,以便回调函数不会进行某种复制并将其丢弃。例如,我想查看this指针的地址。如何在VS2010 Exp中实现这一点 编辑在C#中显示引用地址(调试WCF),c#,wcf,C#,Wcf,我正在调试一个具有双向通信的WCF项目。我有一个回调,其中包含存储在数组中的数据—客户端、WinForm,并使用它绘制控件。正如您所猜测的,从写入数组(实际上是一个列表)到读取数据,数据都会消失 对于调试,我想看看我是否正在写入和读取同一个对象,以便回调函数不会进行某种复制并将其丢弃。例如,我想查看this指针的地址。如何在VS2010 Exp中实现这一点 编辑 一些代码: 字段声明: // the cards that the player have private List&
一些代码: 字段声明:
// the cards that the player have
private List<Card> cards = new List<Card>();
调试时,我首先在回调处理程序中输入,然后在卡中添加卡
PaintCards()
调用Invalidate
并运行绘制事件。在cardPanel\u Paint
中时,cards.Count
再次为零
致以最诚挚的问候。
Görgen垃圾收集器可以更改c#中对象的地址,因此您不能使用该地址(并且没有直接的方法可以这样做)
但您可以使用来与对象进行比较,以查看它们是否真的相同
编辑:
但看起来你把事情搞砸了
var a = new List<string> { "String1" };
var b = a;
a = new List<string> { "String 2" }; // really GetListFromWcf();
Console.WriteLine(b[0]);
var a=新列表{“String1”};
var b=a;
a=新列表{“字符串2”};//真正的GetListFromWcf();
Console.WriteLine(b[0]);
这将打印String1
,而不是String2
如果您无法找到它,您需要发布一些代码来显示出错的地方。在Watch/Locals/Autos窗口中,您可以右键单击对象并选择“生成对象ID”,为对象提供标识号。该数字实际上与本机对象的地址相同;它用于识别
对象的标识是通过垃圾收集和压缩来跟踪的,因此在应用程序的整个生命周期中,您可以判断某个对象是否是您最初标记的对象。此功能在您的情况下可能会有所帮助
快速浏览该功能
谢谢你的指点。问题是,假设是同一个对象,只是一个F5之后,它们暂时分开。有什么想法吗?@Gorgen,你需要展示一些你正在做的代码。你能给出一个失败的简单例子吗?是的,我搞砸了,我收到了两个相反顺序的回调,第一个写了,第二个删除了数据。男人们在秋天的时候会把自己钉在十字架上,而男人们坐在椅子上则会把所有的东西都钉在十字架上。谢谢你的回答,这是同一个物体。
private void cardPanel_Paint(object sender, PaintEventArgs e)
{
int counter = 0;
Point fromCorner = new Point(20,12);
int distance = 50;
foreach (Card card in cards)
{
Point pos = fromCorner;
pos.Offset(counter++ * distance, 0);
Bitmap cardBitmap =
cardFaces[Convert.ToInt32(card.suit),
Convert.ToInt32(card.rank)];
Rectangle square = new Rectangle(pos, cardBitmap.Size);
e.Graphics.DrawImage(cardBitmap, square);
}
var a = new List<string> { "String1" };
var b = a;
a = new List<string> { "String 2" }; // really GetListFromWcf();
Console.WriteLine(b[0]);