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# 中是不可能的——对此我非常感激。这听起来像是可读性灾难的秘诀。正如 Greg 所展示的,您可以在一个方法中引入自己的作用域,仅用于此目的。

我不知道哪些语言允许你这样做——当然,弱类型语言通常会让你分配任意值,但我不知道有一种语言有明确的变量声明和类型信息,并且还允许在范围相同。

您可能想阅读 Eric Lippert 的最新博客文章,该文章都是关于范围的。(如果您还没有阅读 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 回答