1

前回の質問ではうまく説明できず、満足できる答えが得られなかったので、新しいものを開くことにしました。
端的に言えば、私が基本的にやろうとしているのは、コードの一部として変数(それが保持する値)をコンパイルすることです(特に私の場合は別の変数を参照します)

int var_1, var_2, var_3 ... var_10;
for (int i = 1; i <= 10; i++)
{
    var_%i%=20; //if i is 1, then var_1's value will be set to 20, if i is 2, then var_2's value will be set to 20. So basically this loop sets the value of var_1 .. var_10 to 20
}

いずれにせよ後者が明確でない場合は、さらに簡単な方法で説明できます。

int var_5;
int SomeOtherVar = 5;
var_%SomeOtherVar% = 10; // so var_5 (where 5 is the value of SomeOtherVar) is set to 10

これは実行可能ですか?実行可能である場合、アプローチは何ですか?

4

4 に答える 4

4

いいえ、それはできません。配列を使用しないのはなぜですか?

    int[]  array = new int[3];

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

それが役に立てば幸い。

于 2012-12-30T22:35:04.543 に答える
0

それは不可能です。代わりに配列を使用してください。タイプは ですint[]が、配列に関するチュートリアルを読んで、配列の作成方法と使用方法を理解することをお勧めします。

于 2012-12-30T22:33:36.053 に答える
0

静的な型チェックをバイパスしたい場合や、コーディング ホラーを作成したい場合は、キーワードと組み合わせてExpandoObjectdynamicを使用できます。スコープに変数を設定することはできませんが、技術的には独自の変数を宣言できます。IDictionary<string, object>私の例では、実行時に文字列からメンバーの名前を作成するため、にキャストすることに注意してください。次のメソッドは、20 個のメンバーを作成し、0 から 19 までの値を割り当てます。

static dynamic SetVariables(IEnumerable<int> range)
{
    const string variableName = "var_";
    var expandoDictionary = new ExpandoObject() as IDictionary<string, object>;
    foreach (var i in range)
        expandoDictionary[variableName + i] = i;
    return expandoDictionary;
}

その後、次の方法でメンバーに簡単にアクセスできます。

var container = SetVariables(Enumerable.Range(0, 20));
var value13 = container.var_13;

この使用法はお勧めしません。できる限り近づかないようにしてくださいdynamic。ただし、問題解決のためには、これは安全ではないが部分的な解決策の 1 つと見なすことができます。

于 2012-12-31T06:28:05.160 に答える
0

これを行う必要がある状況は考えられません。連続する数値のリストに対して値を格納する場合は、配列を使用します。それ以外の場合は、辞書を使用できます。たとえば、質問のように「var1」= 20、「var2」= 20 を保存するには、次のようにします。

Dictionary<string, int> dict = new Dictionary<string, int>();

for (int i = 1; i <= 10; i++)
{
    dict.Add("var" + i.ToString(), 20);
}

使用例:

dict["var1"]              // 20
dict["var2"]              // 20
dict.ContainsKey("var3")  // true
dict.ContainsKey("var99") // false

注:任意の文字列をキーとして使用して値を保存/検索できることを示すために、文字列「var」をループのintと連結しています。この場合、これは少し奇妙なことであり、おそらく通常の配列に固執するのが最善でしょうが、私の例は辞書がより複雑なキーでどのように機能するかを示しています。

于 2012-12-30T22:43:08.493 に答える