2016-06-14 7 views
2

ich durch die Änderung des Namens des Rechtecks ​​mehrere Rechtecke (mit dynamischen Namen) erstellen möchtenErstellen Sie ein Rechteck, das seinen Namen in C# ändern kann mit Schleife

int[] num= { 1, 2, 3, 4 }; //I need infant number of rectangle but here only a symbol of four numbers. 
for (int i = 0; i < 3; i = i + 1) 
{ 
    string mystring= "regctangle"+num[i].ToString(); 
    string rectanglename = myString; //this is the rectangle name change with the loop 
    Rectangle rectanglename= new Rectangle(10, 10, 3, 3); 
} 

Die Ergebnisse sollten für die erste Iteration Rechteck sein

rectangle1

rectangle2

rectangle3

rectangle4

+6

Variablennamen können nur vom Programmierer festgelegt werden. dynamische Variablennamen sind nicht möglich. Wenn Sie irgendetwas mit einer eigenen Zeichenfolge bewerkstelligen wollen, können Sie es in ein Dictionary einfügen TaW

+1

Leider denke ich nicht, was Sie fragen, ist möglich. In C# können Sie eine Variable nicht als einen Typ deklarieren und dann als einen anderen Typ deklarieren. In diesem Fall 'rectanglename' als Typ' string' und dann als Typ 'Rectangle'. Mein Vorschlag wäre, eine Liste von Schlüsselwertpaaren zu erstellen, um Ihre Rechtecke zu halten. Der Schlüssel wäre Ihr Name und der Wert wäre das Rechteck. Nur ein Gedanke. – Patrick

Antwort

3

Diese Frage ist irgendwie interessant ... hier sind einige Optionen, die ich mir ausgedacht habe, da ich nicht sicher bin, was Ihre Absicht mit diesen einzigartigen Variablennamen ist.

Was Sie tun müssten, ist entweder: 1) Fügen Sie das Rechteck zu einem Wörterbuch oder 2) Fügen Sie eine Name-Eigenschaft der Rectangle-Klasse.

Ich habe beide auf den Code unten.

//dictionary for our rectangles 
var rectangleDict = new Dictionary<string, Rectangle>(); 

for (int i = 0; i < 3; i = i + 1) 
{ 
    var rectangle = new Rectangle(10, 10, 3, 3);  
    string rectangleName = "rectangle" + i.ToString(); 

    //add rectangle name to new dictionary entry and the Rectangle name property 
    rectangle.name = rectangleName; 
    rectangleDict[rectangleName] = rectangle;   
} 

Sobald Sie das eingerichtet haben, hier sind ein paar Optionen, wie Sie diese Rechtecke und ihre Eigenschaften nachschlagen.

//#1 Use the dict to iterate through them 
foreach (KeyValuePair<string, Rectangle> rect in rectangleDict) 
{ 
    Console.WriteLine(rect.Key);  
    //iterate through any property in the rectangle such as its sides, name, etc 
    Console.WriteLine(rect.Value.name); 
} 

//#2 use the key directly to access a property 
Console.WriteLine(rectangleDict["rectangle1"].name); 
+0

Ich löste es durch Hinzufügen einer Namenseigenschaft zur Rectangle-Klasse. T – user6425922

+0

Super !!! Froh das zu hören! – alexr101

0

Ich denke, das erste Problem hier ist, wie werden Sie die Rechtecke beschriften? Basierend auf dem MSDN api documentation für Rectangle gibt es keine Eigenschaft, die Sie zum Speichern von benutzerdefinierten Namen verwenden können.

Nur ein Gedanke, da kann es eine bessere Lösung geben. Sie können die Rectangle-Klasse möglicherweise erweitern, einen Variablenaufruf "name" oder etwas einwerfen und dann die Setter- und Getter-Operatoren dafür schreiben.

Dann in Ihrem Code, wenn Sie das Etikett drucken müssen nur tun.

int[] num= { 1, 2, 3, 4 }; 
for (int i = 0; i < num.length; i++) 
{ 
    MyRectangle rectanglename = new MyRectangle("NAME_XXX", 10, 10, 3, 3); 
    // Probably push the instance into an array for later reference. 
} 

// When you need the rectangle's name just do something like 
console.writeline(rectangle10.name); 

Entschuldigung hier. Mein Unix-Laptop hat keine Kopie von Visual Studio installiert, so dass ich Ihnen nicht wirklich ein richtiges Stück Code zeigen kann, nur Pseudo-Code.