Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/277.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# 为什么;新的图钉();创建上一个图钉的参照?_C#_Bing Maps_Windows Phone 7.1 - Fatal编程技术网

C# 为什么;新的图钉();创建上一个图钉的参照?

C# 为什么;新的图钉();创建上一个图钉的参照?,c#,bing-maps,windows-phone-7.1,C#,Bing Maps,Windows Phone 7.1,我想在WindowsPhone7应用程序的bing地图中创建两个图钉,将它们添加到一个图层中。 我创建了一个函数,它创建了一个带有一些预定义属性的图钉。 奇怪的是,当我使用此函数创建第一个pin时, 图钉 销=新的图钉()按预期工作。它会创建一个新的图钉。。。 但是当这个函数为第二个图钉工作时,上面的代码创建了对第一个图钉的引用。。。 为什么? 我使用的代码如下 Pushpin pin0 = createDefaultPushpin(38.0, 23.0, "test0"); Pushpin

我想在WindowsPhone7应用程序的bing地图中创建两个图钉,将它们添加到一个图层中。 我创建了一个函数,它创建了一个带有一些预定义属性的图钉。 奇怪的是,当我使用此函数创建第一个pin时,

图钉
销=新的图钉()按预期工作。它会创建一个新的图钉。。。 但是当这个函数为第二个图钉工作时,上面的代码创建了对第一个图钉的引用。。。 为什么?

我使用的代码如下

Pushpin pin0 = createDefaultPushpin(38.0, 23.0, "test0");
Pushpin pin1 = createDefaultPushpin(39.0, 24.0, "test1");


private Pushpin createDefaultPushpin(double lat, double lon, String name)
        {
            Pushpin pin;
            pin = new Pushpin();


            pin.Location.Latitude = lat;
            pin.Location.Longitude = lon;
            pin.Location.Altitude = 0;
            pin.Name = name;

            ScaleTransform st = new ScaleTransform();
            st.ScaleX = 0.25;
            st.ScaleY = 0.25;
            st.CenterX = 0;
            st.CenterY = 60;

            pin.RenderTransform = st;
            pin.Background = new SolidColorBrush(Colors.Blue);
            return pin;
        }

我从来没有使用过这些类或这个平台,但让我们接受你上面所说的一切。那么我认为罪魁祸首一定是“位置”对象被无意中共享在您的三个图钉之间。(我认为图钉式构造器这样做是相当不负责任的,但我只是根据你提供的证据,而不是我自己的经验)

你能试试吗

pin.Location=new Location(lat, lon, 0);

在上面代码中的适当位置,并告诉我们发生了什么?

与同事讨论后,发现类Pushpin有一个附加到location的依赖属性。这就是为什么它会这样做。 解决方法是执行以下操作。

Pushpin pin = new Pushpin(){
                  Location = new Location(){
                      Latitude = lat,Longitude = lon, Altitude = 0
                  }
              };

您如何知道此代码创建了对第一个图钉的引用?您是如何观察到引用是相同的?除非其他地方有一些代码在做一些巫术,否则您告诉我们的是不可能的。@MarkByers,因为两个图钉在相同的位置,我已经运行了新的图钉()当在手表的函数中调试时,这返回了第一个图钉…@Peter:两个图钉处于相同的位置并不意味着它们是相同的参考。也可以是两个具有相同值的不同对象。或者可以将这些值声明为静态。或者其他一些情况。@MarkByers不幸的是,情况并非如此。调试时手表中的“new Pushpin()”引用了与第一个…位置相同的pin,但没有此类型的构造函数。因此,我不能使用它。我认为它与依赖属性无关。它与共享的位置对象有关。所以我相信我的直觉在我上面的回答中是正确的,尽管我被这个网页误导,认为有一个三arg构造器:@CoreyKosak这就是我所说的。该位置通过其所具有的依赖项共享。但只有在函数内部使用新的图钉时才会发生这种情况。这是我不明白的。你没有正确使用.NET术语。“依赖性”一词指的是微软与Windows演示基金会(WPF)引入的属性技术。依赖项属性不是简单的CLR项目。仅仅因为此属性似乎“依赖”于另一个属性,您不应该将其称为DependencyProperty。您可能希望在此处阅读更多内容: