2009-12-21 21 views
6

Ich möchte ein zweidimensionales Array von unterschiedlichem Typ erstellen, wie ich dem Array zwei Werte hinzufügen kann, eins davon ist Controlname und das zweite ist boolescher Wert.Definiere zweidimensionales dynamisches Array mit verschiedenen Typen

+0

Ich bin nicht sicher, ich verstehe Ihre Frage, aber nicht ein Wörterbuch Arbeit für das, was wollen Sie tun ? Versuchen Sie, Schlüssel/Wert-Paare zu speichern? –

+0

ja .............. – Harikrishna

Antwort

9

Sie können das nicht tun. Stattdessen sollten Sie eine Klasse erstellen, die diese beiden Eigenschaften enthält, dann können Sie ein Array dieses Typs erstellen:

public class MyClass 
{ 
    public string ControlName {get;set;} 
    public bool MyBooleanValue {get;set;} 
} 

public MyClass[] myValues=new MyClass[numberOfItems]; 

Oder, wie Anders sagt, ein Wörterbuch verwenden, wenn eine der Eigenschaften gemeint ist, verwendet werden, um Suchvorgänge durchführen.

1

Wenn Sie einen booleschen Wert nach Steuerelementnamen suchen/setzen möchten, können Sie eine Dictionary<string, bool> verwenden.

4

Sie können das nicht mit einem Array.

Vielleicht sollten Sie eine Dictionary verwenden?

Ein generisches Wörterbuch von Dictionary<string,bool> scheint die Art von Sache zu sein, die für Ihre Beschreibung arbeiten wird.

0

Verwenden Sie das Wörterbuch < string, bool >. Wenn Sie aus irgendeinem Grund wirklich ein Array benötigen, versuchen Sie das Objekt [,] und übergeben Sie die Werte an die gewünschten Typen.

4

Ein Wörterbuch funktioniert für das, was Sie dann tun möchten.

Dictionary<string, bool> controllerDictionary = new Dictionary<string, bool>(); 

Um einen Wert

if (controllerDictionary.ContainsKey(controllerName)) 
    controllerDictionary[controllerName] = newValue; 
else 
    controllerDictionary.Add(controllerName, newValue); 

auf einen Wert

if (controllerDictionary.ContainsKey(controllerName)) 
    return controllerDictionary[controllerName]; 
else 
    //return default or throw exception 
+0

Sie können einfach 'controllerDictionary [controllerName] = newValue;' verwenden, die 'ContainsKey' und' Add' sind nicht erforderlich –

+0

Ye, das ist wahr, es ist nur benötigt für die die erhalten –

1

andere Art und Weise zu bekommen, es zu tun ist einen Array vom Typ Objekt zu erstellen, zu setzen und diese dann zu einem Arraylist hinzufügen . Hier ist ein Beispielcode:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Text; 
    using System.Threading.Tasks; 
    using System.Collections; 
    using System.Collections.Generic; 

    namespace Collections 
    { 
     class Program 
     { 
      static void Main(string[] args) 
      { 
       ArrayList ar = new ArrayList(); 
       object[] o = new object[3]; 
       // Add 10 items to arraylist 
       for (int i = 0; i < 10; i++) 
       { 
        // Create some sample data to add to array of objects of different types. 
        Random r = new Random(); 
        o[0] = r.Next(1, 100); 
        o[1] = "a" + r.Next(1,100).ToString(); 
        o[2] = r.Next(1,100); 
        ar.Add(o); 
       } 
      } 
     } 
    } 
1

Es hängt davon ab, wie Sie Ihre Array verwenden möchten. Möchten Sie den Wert nach einem Schlüssel oder nach seinem Index suchen? Konamiman schlug eine Klasse vor. Aber eine Klasse mit zwei Typen ist nichts anderes als ein Dictionary<type of key, type of value>. Sie können ein Wörterbuch verwenden, wenn Sie den Wert mit einem Schlüssel erhalten möchten. Wie so:

Dictionary<string, int> MyDict = new Dictionary<string, int>(); 
MyDict.Add("Brutus", 16); 
MyDict.Add("Angelina", 22); 
int AgeOfAngelina = MyDict["Angelina"]; 

Jetzt ist der Nachteil eines Wörterbuchs ist, dass Sie nicht über sie laufen kann. Die Reihenfolge ist unbestimmt. Sie können MyDict[0].Value nicht verwenden, um das Alter von Brutus (das ist 16) zu erhalten.

könnten Sie verwenden ein

List<KeyValuePair<string, int>> MyList = new List<KeyValuePair<string, int>>(); 

durch eine 2D-Anordnung von zwei unterschiedlichen Typen als List unterstützt Iteration iterieren. Aber dann wieder, können Sie nicht das Alter von Angelina von MyList["Angelina"].Value erhalten, aber Sie müssten MyList[0].Value verwenden.

Aber Sie könnten auch eine Datentabelle verwenden. Aber es erfordert etwas mehr Arbeit, um die Tabelle mit ihren Spalten zu initialisieren.

+0

Natürlich können Sie mit LINQ erweitern, um Abfragen auf Ihre Daten zu verwenden. –

+0

Seit wann kann ich nicht über ein Wörterbuch iterieren? – claudekennilol

0

„Ein mehrdimensionales Array ist ein Array: alle elementsin alle Dimensionen haben die gleiche Art“