-2

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 
}

終了後にID情報をロードするにはどうすればよいですかDownloadFromAPI("url to api");。だから私は0の代わりに正しい数字(14)を取得しますか?

4

2 に答える 2

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);
}

もちろん、これが実際にオブジェクト内の自然な状態である場合、それは理にかなっているかもしれませんが、多くの場合、突然変異領域に入るよりも、値を計算して返すだけのコードを書く方が簡単です。

于 2012-09-20T21:22:19.480 に答える
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); 
} 
于 2012-09-20T21:48:39.823 に答える