C# c-使用来自不同方法的变量
我不确定我是否走对了这条路,所以希望有人能帮助我 我试图在一个方法中使用var,它包含在另一个方法中。正如预期的那样,我得到了错误:名称“Title1”在当前上下文中不存在 首先我读取一个xml文件,然后用图钉填充bing地图。其中一个变量是每个xml项的tite,我需要在下面的方法中使用Title1变量 代码如下: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) {
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-我只是在制作一个程序,其中包括在地图上放置交通信息:需要注意的是,类变量不能满足他当前的需要。需要注意的是,类变量不能满足他当前的需要。这绝对完美。你真的解决了我几个星期来一直想做的事情!!非常感谢泽维尔。这绝对是完美的。你真的解决了我几个星期来一直想做的事情!!非常感谢泽维尔。