2009-08-04 69 views
2

我只是好奇...是否有可能在c#中释放一个变量?

是否有可能在c#中释放一个变量?

我的意思是,你能不能做这样的事情:

... 
string x = "billy bob"; 

//release variable x somehow 

string x = "some other string"; 

//release variable x somehow 

int x = 329; 
... 

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

如果在c#中这是不可能的,那么可以使用哪些语言?

+8

你为什么要? – 2009-08-04 22:03:55

+1

是的,我的意思是,除了重用变量令人困惑的事实之外,为什么不只是创建一个新变量? – 2009-08-04 22:12:16

回答

16

你可以用范围来做到这一点(松散的术语,我认为这将是一个声明空间)。以下是完全的方法体中是合法的C#:

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

我不会建议这样写代码虽然,这使得它太容易得到的方法混淆变量。最好使用不同的,更具描述性的名称,或者将每个块分成自己的方法。

11

不,这是不可能的在同一范围内的C# - 我非常感谢。这听起来像是可读性灾难的秘诀。正如Greg所表明的那样,尽管您可以在方法中引入您自己的范围。

我不知道哪些语言允许你这样做 - 弱类型语言通常会让你指定任意值,但我不知道具有显式变量声明的语言的类型信息和也允许在同一范围内重新宣布。

您可能想要阅读Eric Lippert的最新博客帖子,即all about scope。 (如果您还没有阅读过Eric的博客,您可能需要在日历中清除几天,并阅读所有后端文章...或者至少自加入C#团队以来的文章。反复)

2

您可以重复使用的字符串:。

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

你为什么要这么做?

也许你可以这样做:

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

,只要你喜欢。然后投它?

0

您可以重新分配变量,当然:

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

不能在同一范围内重新声明变量:

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

由于对象是在.NET类型系统的根目录,你可以这样做:

object o = "billy bob"; 
o = "foo"; 
o = 5; 
相关问题