Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#中显示引用地址(调试WCF)_C#_Wcf - Fatal编程技术网

在C#中显示引用地址(调试WCF)

在C#中显示引用地址(调试WCF),c#,wcf,C#,Wcf,我正在调试一个具有双向通信的WCF项目。我有一个回调,其中包含存储在数组中的数据—客户端、WinForm,并使用它绘制控件。正如您所猜测的,从写入数组(实际上是一个列表)到读取数据,数据都会消失 对于调试,我想看看我是否正在写入和读取同一个对象,以便回调函数不会进行某种复制并将其丢弃。例如,我想查看this指针的地址。如何在VS2010 Exp中实现这一点 编辑 一些代码: 字段声明: // the cards that the player have private List&

我正在调试一个具有双向通信的WCF项目。我有一个回调,其中包含存储在数组中的数据—客户端、WinForm,并使用它绘制控件。正如您所猜测的,从写入数组(实际上是一个列表)到读取数据,数据都会消失

对于调试,我想看看我是否正在写入和读取同一个对象,以便回调函数不会进行某种复制并将其丢弃。例如,我想查看this指针的地址。如何在VS2010 Exp中实现这一点

编辑
一些代码:

字段声明:

    // 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]);