Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/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# c-使用来自不同方法的变量_C#_Silverlight_C# 4.0 - Fatal编程技术网

C# c-使用来自不同方法的变量

C# c-使用来自不同方法的变量,c#,silverlight,c#-4.0,C#,Silverlight,C# 4.0,我不确定我是否走对了这条路,所以希望有人能帮助我 我试图在一个方法中使用var,它包含在另一个方法中。正如预期的那样,我得到了错误:名称“Title1”在当前上下文中不存在 首先我读取一个xml文件,然后用图钉填充bing地图。其中一个变量是每个xml项的tite,我需要在下面的方法中使用Title1变量 代码如下: public void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e) {

我不确定我是否走对了这条路,所以希望有人能帮助我

我试图在一个方法中使用var,它包含在另一个方法中。正如预期的那样,我得到了错误:名称“Title1”在当前上下文中不存在

首先我读取一个xml文件,然后用图钉填充bing地图。其中一个变量是每个xml项的tite,我需要在下面的方法中使用Title1变量

代码如下:

 public void OnOpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
    {


        var document = XDocument.Load(e.Result);

        if (document.Root == null)
            return;

        var xmlns = XNamespace.Get("http://www.blahblah.com");

        var events = from ev in document.Descendants("item")
                     select new
                   {
                       Latitude = Convert.ToDouble(ev.Element(xmlns + "Point").Element(xmlns + "lat").Value),
                       Longitude = Convert.ToDouble(ev.Element(xmlns + "Point").Element(xmlns + "long").Value),
                       Title = (ev.Element("title").Value),
                       Description = (ev.Element("description").Value),
                       Link = (ev.Element("link").Value),
                   };

        QuakeLayer.Children.Clear();

        foreach (var ev in events)
        {

            var accentBrush = (Brush)Application.Current.Resources["PhoneAccentBrush"];
            var Title1 = (ev.Title);
            var pin = new Pushpin

            {
                Location = new GeoCoordinate
                {
                    Latitude = ev.Latitude,
                    Longitude = ev.Longitude
                },
                Background = accentBrush,

                Content = Title1


            };

            QuakeLayer.AddChild(pin, pin.Location);


        }

    }


    public void Pushpin_ManipulationStarted(object sender,  ManipulationStartedEventArgs e)
    {

        NavigationService.Navigate(new Uri("/blahblah.xaml?info=" + Title1, UriKind.Relative));

    }

将其设置为类变量。或者将其作为参数传递给另一个函数。但局部变量仅在函数内部有效。函数可以递归调用多次。在这种情况下,每个堆栈帧中都有所有局部变量的多个副本。所以你所问的毫无意义。

将其设为类变量。或者将其作为参数传递给另一个函数。但局部变量仅在函数内部有效。函数可以递归调用多次。在这种情况下,每个堆栈帧中都有所有局部变量的多个副本。因此,您的要求毫无意义。

因为Title1是在循环中创建的,所以唯一可行的方法是将项作为参数传递给对象,或者将所需的值存储在可以获取它的位置。可能作为启动其他事件的对象上的标记。

由于Title1是在循环内部创建的,因此唯一可行的方法是将项作为参数传递给对象,或者将所需的值存储在可以从中获取它的位置。可能作为启动其他事件的对象上的标记。

图钉是事件的发送者吗?如果是这样,您可以从中获取标题,因为您将其设置为内容

public void Pushpin_ManipulationStarted(object sender,  ManipulationStartedEventArgs e)
{
    var pushPin = (PushPin)sender;
    var title = pushPin.Content;
    NavigationService.Navigate(new Uri("/blahblah.xaml?info=" + title, UriKind.Relative));

}

图钉是事件的发送者吗?如果是这样,您可以从中获取标题,因为您将其设置为内容

public void Pushpin_ManipulationStarted(object sender,  ManipulationStartedEventArgs e)
{
    var pushPin = (PushPin)sender;
    var title = pushPin.Content;
    NavigationService.Navigate(new Uri("/blahblah.xaml?info=" + title, UriKind.Relative));

}

不能跨不同的方法引用局部变量。首先,局部变量在函数返回时不再存在。另一方面,在运行events foreach循环的过程中,似乎Title局部变量将被分配许多不同的值,因此将Title1变量移出类字段不会解决任何问题


最好的方法可能是将标题1与图钉对象关联。哪个对象作为发送方传递到pushpin事件中?如果这是图钉对象本身,或者图钉对象通过事件args参数可用,则您可以自由返回。图钉的内容属性包含Title1值。使用Pushpin.Content而不是Title1。

您不能跨不同的方法引用局部变量。首先,局部变量在函数返回时不再存在。另一方面,在运行events foreach循环的过程中,似乎Title局部变量将被分配许多不同的值,因此将Title1变量移出类字段不会解决任何问题


最好的方法可能是将标题1与图钉对象关联。哪个对象作为发送方传递到pushpin事件中?如果这是图钉对象本身,或者图钉对象通过事件args参数可用,则您可以自由返回。图钉的内容属性包含Title1值。使用Pushpin.Content而不是Title1。

如果在循环中使用匿名方法,则可以在编译期间访问此变量:

var pin = new Pushpin
{
    ...
    Content = Title1
};

pin.ManipulationStarted += (s, a) =>
{
    // Code for the event here
    // ... do something with Title1
};

QuakeLayer.AddChild(pin, pin.Location);

如果在循环中使用匿名方法,则可以在编译期间访问此变量:

var pin = new Pushpin
{
    ...
    Content = Title1
};

pin.ManipulationStarted += (s, a) =>
{
    // Code for the event here
    // ... do something with Title1
};

QuakeLayer.AddChild(pin, pin.Location);

如果您将标题作为参数传递给第二种方法会怎么样?出于兴趣,您是地球物理学家还是地质学家?你的代码片段让我很感兴趣:@Tim Barras-我只是在制作一个程序,它几乎涉及到将交通信息放在地图上:如果你将标题作为参数传递给第二种方法会怎么样?出于兴趣,你是地球物理学家还是地质学家?你的代码片段让我很感兴趣:@Tim Barras-我只是在制作一个程序,其中包括在地图上放置交通信息:需要注意的是,类变量不能满足他当前的需要。需要注意的是,类变量不能满足他当前的需要。这绝对完美。你真的解决了我几个星期来一直想做的事情!!非常感谢泽维尔。这绝对是完美的。你真的解决了我几个星期来一直想做的事情!!非常感谢泽维尔。