在C#中的方法之间传递数据

时间:2013-12-04 06:48:03

标签: c# visual-studio-2012 windows-8 parameter-passing

我的Windows 8桌面应用程序中有以下代码。这将从Web服务获取数据并将其填充到列表SampleDataGroup中。

protected override async void LoadState(Object navigationParameter, Dictionary<String, Object> pageState)
 {
    HttpClient client = new HttpClient();
    HttpResponseMessage response = await client.GetAsync("http://localhost:12345/api/items");

    var info = new List<SampleDataGroup>();

    if (response.IsSuccessStatusCode)
    {
        var content = await response.Content.ReadAsStringAsync();

        var item = JsonConvert.DeserializeObject<dynamic>(content);

        foreach (var data in item)
        {
            var infoSect = new SampleDataGroup
            (
                (string)data.Id.ToString(),
                (string)data.Name,
                (string)"",
                (string)data.PhotoUrl,
                (string)data.Description
            );
            info.Add(infoSect);
            //data=infoSect;
        }
    }
    else
    {
        MessageDialog dlg = new MessageDialog("Error");
        await dlg.ShowAsync();
    }
    }

这很好用。但是我想在另一个函数中使用上面函数中的数据。我想用。我从Web服务获得的属性和值,我想在另一个函数中使用。

private void Item_Click(object sender, RoutedEventArgs e)
{
  //Use (string)data.Name
}

在点击功能中,我想使用Name,以及第一个函数中的所有其他数据值。

我尝试在代码中设置SampleDataGroup data=null;,然后使用上面注释掉的data=infoSect,然后在click函数中调用data.Name,但它返回一个空异常。

如何将数据从一个函数传递到另一个函数?

2 个答案:

答案 0 :(得分:1)

目前你的异步方法返回void,填充后你没有对info做任何事情。在我看来,您可能希望从该方法返回该列表(例如,使其返回Task<List<SampleDataGroup>>)或使该方法在实例变量中设置状态,以便它成为调用该方法的对象状态的一部分。

如果没有关于您正在设计的类的更多信息,很难知道信息逻辑上是对象状态的一部分还是应该从方法返回 - 但这些是你的基本选择。 (有更复杂的选择,但这是前两个要考虑的。)

如果出现错误,你还应该考虑你想要在状态方面发生什么 - 你正在显示一个对话框,但是你想在那之后发生什么?

答案 1 :(得分:1)

最简单的方法是将全局对象声明为

object item;

然后像这样改变它

if (response.IsSuccessStatusCode)
{
    var content = await response.Content.ReadAsStringAsync();

    item = JsonConvert.DeserializeObject<dynamic>(content);

现在这应该在具有最新值

的点击事件中可用