C#在加载void后执行某些操作

时间:2012-09-20 21:19:55

标签: c#

我从API下载后尝试使用数据。我的代码示例:

private int id;
public MainPage()
{
    InitializeComponent();
    SomeFunction();
}
public void SomeFunction()
{
    DownloadFromAPI("url to api");
    MessageBox.Show(id.ToString());  //<< Returns 0
}
public void DownloadFromAPI(DownloadStringCompletedEventArgs url)
{
    //code to retrieve data (singel id)
    id = Int16.Parse(data);
    MessageBox.Show(id.ToString());  //<< Returns the correct number, like 14
    test();
}
private void test()
{
    MessageBox.Show(id.ToString());  //<< Even Returns the correct number 14 
}

如何在DownloadFromAPI("url to api");完成后加载id信息。所以我得到正确的数字(14)而不是0?

2 个答案:

答案 0 :(得分:5)

我怀疑你的方法实际看起来像这样:

public void DownloadFromAPI(...)
{
    int id = Int16.Parse(data);
    MessageBox.Show(id.ToString());  //<< Returns the correct number, like 14
}

这是在方法中声明一个新的局部变量,而不是为实例变量赋值。

但是,就个人而言,我更喜欢编写方法来返回值:

public int DownloadFromApi(...)
{
    return Int16.Parse(data);
}

当然,如果这确实是对象中的自然状态,那么它可能是有意义的 - 但通常编写只计算值并返回它的代码比进入变异区域更简单。

答案 1 :(得分:0)

无论是否将“id”保留在本地类成员中,无论哪种方式,通常都应该让您的方法根据输入进行操作并生成任何相关的输出,而不引用其本地堆栈之外的内容。我会选择以下内容:

public MainPage() 
{ 
  InitializeComponent(); 
  SomeFunction(); 
} 

public void SomeFunction() 
{ 
    int id;
    DownloadFromAPI("url to api", out id); 
    MessageBox.Show(id.ToString());
} 

public void DownloadFromAPI(url, out int id) 
{ 
  //retrieve data...

  // set id...
  id = Int16.Parse(data); 
}