2017-09-02 2 views
1

Mein Ziel ist es, die Daten zu verwenden, die ich bekomme und in eine Tabelle zu legen. Zwei Spalten, eine mit der Bezeichnung Name und die andere Region. Ich bin ziemlich neu in C# und festgestellt, dass es eine Funktion namens Datentabelle gibt, die Ihnen erlaubt, das zu tun, aber mit ein wenig Forschung, die nicht in C# core verfügbar ist (korrigieren Sie mich, wenn ich bitte falsch liege). Deshalb fand ich dieses Ding namens Wörterbücher und versuchte mein Bestes:C# Core mit Dictionary als Tabelle

 Dictionary<string, string> dict = new Dictionary<string, string>(); 


     foreach (var rGroup in azure.ResourceGroups.List()) 
     { 

      // dict.Add("Name", rGroup.Name); 
      // dict.Add("Region", rGroup.Region.Name); 
      dict.Add(rGroup.Name, "Name"); 
      dict.Add(rGroup.Region.Name, "Region"); 

     } 
     foreach (var di in dict) 
     { 
      Console.WriteLine("Key = {0}, Value = {1}", di.Key, di.Value); 
     } 

Ich erhalte den Fehler

System.ArgumentException aufgetreten HResult = 0x80070057 Nachricht = Ein Element mit demselben Schlüssel wurde bereits hinzugefügt. Key: Nordeuropa bekannt
Source = Stacktrace: bei System.ThrowHelper.ThrowAddingDuplicateWithKeyArgumentException (Object key) bei System.Collections.Generic.Dictionary`2.Insert (TKey Schlüssel, TValue Wert, Boolean add) bei AzureAPi.Program.RunSample (IAzure azur) in C: \ Benutzer \ solar \ Dokumente \ Visual Studio 2017 \ Projects \ zu \ zu \ Program.cs: Linie 44 an AzureAPi.Program.Main (String [] args) in C: \ Benutzer \ solar \ Dokumente \ Visual Studio 2017 \ Projects \ zu \ zu \ Program.cs: Linie 72

Kann mir jemand helfen, was Ich habe falsch gemacht? Ist dies der beste und einfachste Weg, dies zu erreichen?

+1

Wörterbuch Tasten (die erste Param 'dict.Add') muss eindeutig sein. Wenn 'azure.ResourceGroups.List()' doppelte '.Name'-Felder haben kann, können Sie kein' Dictionary' verwenden. Wenn du Duplikate zulassen willst, solltest du eine 'List' oder ähnliches verwenden. Wir können Ihnen möglicherweise einen besseren Rat geben, wenn Sie Werte von azure.ResourceGroups.List() zeigen und erklären, was Sie damit zu tun versuchen. –

Antwort

1

Ich glaube, Sie hinzufügen, die Elemente falsch

foreach (var rGroup in azure.ResourceGroups.List()) { 
    dict[rGroup.Name] = rGroup.Region.Name; 
} 

verwenden Sie die Gruppennamen als Schlüssel und die Region als Wert.

Anders als das Sie eine stark typisierte Objekt erstellen, können Ihre Daten

public class MyTableName { 
    public string Name { get; set; } 
    public string Region { get; set; } 
} 

und bauen aus der Sammlung zu halten.

Hinweis: Die Verwendung von Linq

var data = azure.ResourceGroups.Select(rGroup => new MyTableName { 
              Name = rGroup.Name, 
              Region = rGroup.Region.Name 
             }).List() 

foreach (var item in data) { 
    Console.WriteLine("Key = {0}, Value = {1}", item.Name, item.Region); 
} 

Sie auch einen anonymen Typ

var data = azure.ResourceGroups.Select(rGroup => new { 
              Name = rGroup.Name, 
              Region = rGroup.Region.Name 
             }).List() 

foreach (var item in data) { 
    Console.WriteLine("Key = {0}, Value = {1}", item.Name, item.Region); 
} 
2

Ein Ansatz, der auf Ihre Idee ist in der Nähe könnte eine Liste eines Objekts verwenden könnte, die einfach Ihre Region enthält und Name der Region.

Erstellen Sie eine Klasse wie dieses

public class Region 
{ 
    public string Name { get; set; } 
    public string RegionName { get; set; } 
} 

Und Ihre Wörterbuch ersetzen mit Region-Liste eingegeben haben.

List<Region>