2009-08-04 17 views
2

Ich bin nur neugierig ...Ist es möglich, eine Variable in C# freizugeben?

Ist es möglich, eine Variable in C# freizugeben?

Was ich meine ist, können Sie etwas tun, wie folgt aus:

... 
string x = "billy bob"; 

//release variable x somehow 

string x = "some other string"; 

//release variable x somehow 

int x = 329; 
... 

... also im Grunde sind Sie die Variable mehrfach in der gleichen Umfang zu erklären.

Wenn dies in C# nicht möglich ist, in welchen Sprachen ist es möglich?

+8

Warum möchten Sie? –

+1

Ja, ich meine, neben der Tatsache, dass die Wiederverwendung von Variablen verwirrend ist, warum würden Sie nicht einfach eine neue Variable erstellen? –

+1

Sie könnten eine "Casting" -Operation durchführen, um den Typ zu ändern, wenn Sie in die andere Richtung gehen wollten, z. Nimm ein int und konvertiere den Wert in eine Zeichenkette zum Schreiben in eine Datei oder ein anderes Ausgabegerät. –

Antwort

16

Sie können es mit Bereichen (lose Begriff; formal glaube ich, dies wäre eine Deklaration Raum), z. Folgendes ist vollkommen legal C# in einem Verfahren Körper:

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

Ich würde nicht raten Code wie diesen zu schreiben aber es macht es viel zu einfach Variablen in einer Methode verwirrt zu bekommen. Es empfiehlt sich, andere, aussagekräftigere Namen zu verwenden oder jeden Block in eine eigene Methode zu zerlegen.

+0

Es scheint, dass Sie Eric Lipperts neuesten Blogpost gelesen haben;) –

+0

@Thomas - In der Tat habe ich :-) –

+2

legal, aber einfach nur böse ... * eye stab * –

11

Nein, das ist in C# nicht im selben Umfang möglich - dafür bin ich sehr dankbar. Es klingt wie ein Rezept für Lesbarkeitskatastrophen. Wie Greg gezeigt hat, können Sie Ihre eigenen Bereiche innerhalb einer Methode nur für diesen Zweck jedoch vorstellen.

Ich weiß nicht, welche Sprachen können Sie dies tun - schwach typisierten Sprachen werden oft können Sie beliebige Werte natürlich zuweisen, aber ich weiß nicht, von einer Sprache, die explizite Variablendeklarationen mit Typinformation und erlaubt auch eine Neuanmeldung im selben Umfang.

Vielleicht möchten Sie Eric Lippert neuesten Blogpost lesen, der all about scope ist. (Wenn Sie Eric's Blog noch nicht gelesen haben, möchten Sie vielleicht ein paar Tage in Ihrem Kalender ausräumen und alle Posts lesen ... oder zumindest die, seit er dem C# -Team beigetreten ist. Bereiten Sie sich darauf vor, Ihre Gedanken durchzublitzen wiederholt)

2

Sie eine Zeichenfolge wiederverwenden können.

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

Warum würden Sie wollen, dies zu tun?

Vielleicht können Sie dies tun:

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

warf es dann, wie Sie wollen?

0

Sie können Variablen zuweisen, natürlich:

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

Sie keine Variablen im gleichen Umfang neu deklarieren können:

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

Seit Objekt ist die Wurzel des Typs System in .NET, Sie können so etwas tun:

object o = "billy bob"; 
o = "foo"; 
o = 5; 
Verwandte Themen