2

私はただ興味があります...

C#で変数を解放することは可能ですか?

私が言いたいのは、あなたはこのようなことをすることができますか?

...
string x = "billy bob";

//release variable x somehow

string x = "some other string";

//release variable x somehow

int x = 329;
...

...したがって、基本的には、同じスコープ内で変数を複数回宣言しています。

これがc#で不可能な場合、どの言語で可能ですか?

4

4 に答える 4

19

スコープ(緩い用語。正式にはこれは宣言スペースになると思います)を使用して実行できます。たとえば、メソッド本体内の完全に合法的なC#は次のとおりです。

{
    string x = "billy bob";    
}
{
    string x = "some other string";
}
{
    int x = 329;
}

ただし、このようなコードを作成することはお勧めしません。メソッド内で変数を混乱させるのは非常に簡単です。異なる、よりわかりやすい名前を使用するか、各ブロックを独自のメソッドに分離することをお勧めします。

于 2009-08-04T22:02:24.580 に答える
11

いいえ、これは同じスコープ内のC#では不可能です-私は非常に感謝しています。読みやすさの災害のレシピのように聞こえます。グレッグが示したように、あなたはこの目的のためだけにメソッド内にあなた自身のスコープを導入することができます。

どの言語でこれを実行できるかわかりません-弱い型の言語ではもちろん任意の値を割り当てることができますが、型情報を含む明示的な変数宣言があり、同じスコープ。

EricLippertの最新のブログ投稿を読むことをお勧めします。これはすべてスコープに関するものです。(Ericのブログをまだ読んでいない場合は、カレンダーの数日をクリアして、すべてのバック投稿を読むことをお勧めします...または少なくとも彼がC#チームに参加してからの投稿です。心を打たれる準備をしてください。繰り返します。)

于 2009-08-04T22:02:27.480 に答える
2

文字列を再利用できます:

string x = "billy bob";
x = "some other string";

なぜあなたはこれをしたいのですか?

多分あなたはこれを行うことができます:

object x = "billy bob"
x = "some other string";
x = 329;

その後、好きなようにキャストしますか?

于 2009-08-04T22:05:59.890 に答える
0

もちろん、変数を再割り当てできます。

string s = "billy bob";
s = "something else";

同じスコープで変数を再宣言することはできません。

// This is illegal:
string s = "billy bob";
string s = "foo"

Object は .NET の型システムのルートであるため、次のようなことができます。

object o = "billy bob";
o = "foo";
o = 5;
于 2009-08-04T22:09:56.997 に答える