1

参照を指す変数の名前を取得することは可能ですか? 以下に例を示します。

private void FillArray(int[] array, int count)
{
    array = new int[count];

    for (int i = 0; i < array.Length; i++)
    {
        array[i] = i;
    }

    Debug.WriteLine("Array {0} is now filled up with {1} values", array.Name, count);
}

Name上記のメソッドで使用される配列のプロパティはありません。回避策として別のパラメータを文字列として追加し、それに名前を割り当てることは知っていますが、プログラムでこれを行うにはどうすればよいですか? また、独自の実装を作成できることも知っていますが、この特定の質問に対する答えを知りたいです!

4

4 に答える 4

3

参照を指す変数の名前を取得することは可能ですか?

いいえ - 同じ参照を指す複数の変数が存在する可能性があります。変数名は参照自体とは無関係です。

この回答のような手法を使用して、式を使用してプロパティ (参照型のバッキング フィールドを持つプロパティである可能性があります) の名前を取得できることに注意してください。一部のシナリオでは、これにより文字列を提供する必要がなくなり、リファクタリングが容易になりますが、制限があります (プロパティを介してのみ機能するなど)。

于 2012-06-09T21:40:20.767 に答える
2

(ローカル) 変数名は、ストレージの場所に与えられる言語の名前です。コンパイル後、これらの名前はもう存在しません。したがって、一般に、実行時に変数名を取得することは不可能です。

もちろん、これは、フィールド、プロパティ、メソッド、およびクラスについてクエリできるその他のものとは異なります。

于 2012-06-09T21:43:22.200 に答える
2

参照を指す変数の名前を取得することは可能ですか?

いいえ。

一般に、同じオブジェクトへの参照をすべて保持する、異なる名前の複数の変数が存在する可能性があります。ランタイムに保存されているこれらの名前のリストはありません。

于 2012-06-09T21:40:37.270 に答える
1

いいえ、参照には名前がありません。

メソッドに送信されるのは変数ではなく、変数の値であった参照です。

変数さえあれば、それはそうです。メソッドは、新しく作成された配列で呼び出すこともできるため、変数はまったくありません。

FillArray(new int[4], 4)

また、メソッドはそれに送信された配列を破棄して新しい配列を作成するため、配列をまったく使用せずに呼び出すこともできます。

FillArray(null, 4)

メソッドは変数を変更して新しい配列を参照するのではなく、新しい配列を破棄するだけです。refそのためにはoroutキーワードを使用する必要があります。

private void FillArray(out int[] array, int count) {
  array = new int[count];
  for (int i = 0; i < array.Length; i++) {
    array[i] = i;
  }
}
于 2012-06-09T21:46:14.973 に答える