是否可以在c#中释放变量?

时间:2009-08-04 21:59:34

标签: c# .net variables scope declaration

我只是好奇......

是否可以在c#中发布变量?

我的意思是,你可以这样做:

...
string x = "billy bob";

//release variable x somehow

string x = "some other string";

//release variable x somehow

int x = 329;
...

...所以基本上你在相同的范围内多次声明变量。

如果在c#中无法做到这一点,可以使用哪种语言?

4 个答案:

答案 0 :(得分:17)

你可以用范围(松散的术语;正式地认为这将是一个声明空间),例如以下是方法体内完全合法的C#:

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

我不建议编写这样的代码,但它很容易让方法中的变量混淆。最好使用不同的,更具描述性的名称,或将每个块分成自己的方法。

答案 1 :(得分:11)

不,这在同一范围内的C#中是不可能的 - 我非常感激。这听起来像是可读性灾难的秘诀。正如Greg所示,您可以在方法中引入自己的范围,仅用于此目的。

我不知道哪种语言允许你这样做 - 弱类型的语言通常会让你分配任意值当然,但我不知道一种语言有明确的变量声明与类型信息< / em>并允许在同一范围内重新声明。

您可能想阅读Eric Lippert最新的博文,all about scope。 (如果您还没有阅读过Eric的博客,您可能希望在日历中清除几天并阅读所有后期帖子......或者至少是他加入C#团队以来的那些。准备让您的思绪开始反复。)

答案 2 :(得分:2)

您可以重复使用字符串:

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

你为什么要这样做?

也许你可以这样做:

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

然后按你喜欢的方式施展它?

答案 3 :(得分: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;