2016-04-12 6 views
2

私のコードでは、2つのパラメータを持つメソッドがあります。 1つのパラメータはint値をとり、もう1つは配列をとります。ここ変数のリセットを停止する方法

例えば

public void NextSong(int i, TagLib.File[] queue) 
{ 
    i++; 
    SONG_URL = queue[i].Name; 
    Stop(); 
    Play(); 
} 

私の問題は、この変数がそのように呼ばれるたびは次のとおりです。

NextSong(0, SongQueue); 

これは、パラメータフィールドに配置された量に戻ります。これをどうやって止めるのですか?

答えて

2

二つの方法:

public int NextSong(int i, TagLib.File[] queue) 
{ 
    i++; 
    SONG_URL = queue[i].Name; 
    Stop(); 
    Play(); 
    return i; 
} 

int i = 0; 
i= NextSong(i, SongQueue); 

ここでは、我々は法の間に、メソッドにiの変数を渡しているが、我々はその変数をインクリメントしてから戻ってリターンを経由して、それを渡します。これで変数が参照されました。

OR

public void NextSong(TagLib.File[] queue, out int i) 
{ 
    i++; 
    SONG_URL = queue[i].Name; 
    Stop(); 
    Play(); 
} 

int i = 0; 
NextSong(SongQueue, out i); 

これが返される変数を渡すために誰かを強制アウト機能を使用しています。変数を参照渡しします(refを使用することもできますが、intはnullにできないため、この場合はあまり変更されません)。

+0

'out'と' ref'の詳細は https://msdn.microsoft.com/en-us/library/t3c3bfhx.aspx – Draken

+1

を参照してください。 –

2

期待通りに機能していますが、0が渡され続ける限り、変数は常にリセットされます。あなたがiの値をバック得るためにNextSongメソッドのシグネチャを変更するためにそれを行うことができますどのような

public int NextSong(int i, TagLib.File[] queue) 
{ 
    i++; 
    SONG_URL = queue[i].Name; 
    Stop(); 
    Play(); 

    return i; 
} 

次に、あなたのコードの中であなたが0にいくつかのグローバル値を初期化し、次のようにメソッドを呼び出します。 globalVariable = NextSong(globalVariable, SongQueue)

+0

ありがとう、私はグローバル変数を初期化することによってそれを解決し、変数をインクリメントしてメソッドパラメータを追加しました。 メソッド内のインクリメントも削除しました ありがとうございました! –

関連する問題