我从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?
答案 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);
}