2017-06-20 3 views
1

Ich habe den folgenden Code, den ich versuche, mit Foreach arbeiten. Ich spiele mit C# also sehr Anfänger, aber ich kann nicht scheinen, dass das IEnumerable Bit funktioniert ?? Kann mir bitte jemand sagen, wie ich meine Listeneigenschaft überschleifen kann.Enable foreach auf SortedList

using System; 
using System.Collections; 
using System.Collections.Generic; 
namespace MyApplication 
{ 

    class arrayLess : IEnumerable { 

     SortedList<string,dynamic> list = new SortedList<string,dynamic>(); 

     // Will need to update global list of array_values 
     // This will be a proper array 
     public void add(dynamic key,dynamic val){ 
      list[key.ToString()] = val; 
     } 

     // Could be int in which case need a list that isn't a sortedList? 
     public dynamic get(dynamic key){ 
      return list[key.ToString()]; 
     } 

     IEnumerator<string> IEnumerable<string>.GetEnumerator(){ 
      Console.WriteLine("HERE"); 
      return this.list.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator(){ 
      return this.list.GetEnumerator(); 
     } 
    } 

    class launcher { 
     static void Main(string[] args){ 
      helloWorld HW = new helloWorld(); 
      HW.test(); 
     }  
    } 

    class helloWorld { 

     // Define the variable and type 
     arrayLess resultSet; 

     public void test(){ 

      resultSet = new arrayLess(); 

      resultSet.add("test",new arrayLess()); 

      resultSet.add(5,"Does this work?"); 

      resultSet.get("test").add("new","value"); 

      Console.WriteLine(resultSet.get("test").get("new")); 

      Console.WriteLine(resultSet.get(5)); 

      foreach(string key in resultSet){ 
       Console.WriteLine(key); 
      } 
     } 
    } 
} 

Antwort

2

Ich vermute, was Sie wollen, ist (zweimal):

return this.list.Keys.GetEnumerator(); 

Oder wie voll mit einigen Verstauen der Arbeit:

using System; 
using System.Collections; 
using System.Collections.Generic; 
namespace MyApplication 
{ 

    class ArrayLess : IEnumerable<string> 
    { 

     SortedList<string, dynamic> list = new SortedList<string, dynamic>(); 

     // Will need to update global list of array_values 
     // This will be a proper array 
     public void Add(dynamic key, dynamic val) 
     { 
      list[key.ToString()] = val; 
     } 

     // Could be int in which case need a list that isn't a sortedList? 
     public dynamic this[dynamic key] 
     { 
      get { return list[key.ToString()]; } 
     } 

     public IEnumerator<string> GetEnumerator() 
     { 
      return this.list.Keys.GetEnumerator(); 
     } 

     IEnumerator IEnumerable.GetEnumerator() 
     { 
      return GetEnumerator(); 
     } 
    } 

    static class Launcher 
    { 
     static void Main() 
     { 
      HelloWorld HW = new HelloWorld(); 
      HW.Test(); 
     } 
    } 

    class HelloWorld 
    { 

     // Define the variable and type 
     ArrayLess resultSet; 

     public void Test() 
     { 

      resultSet = new ArrayLess 
      { 
       { "test", new ArrayLess() }, 

       { 5, "Does this work?" } 
      }; 

      resultSet["test"].Add("new", "value"); 

      Console.WriteLine(resultSet["test"]["new"]); 

      Console.WriteLine(resultSet[5]); 

      foreach (string key in resultSet) 
      { 
       Console.WriteLine(key); 
      } 
     } 
    } 
} 

Oder mit C# 7:

class ArrayLess : IEnumerable<string> 
{ 
    SortedList<string, dynamic> list = new SortedList<string, dynamic>(); 
    public void Add(dynamic key, dynamic val) => list[key.ToString()] = val; 
    public dynamic this[dynamic key] => list[key.ToString()]; 
    public IEnumerator<string> GetEnumerator() => list.Keys.GetEnumerator(); 
    IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); 
} 
+0

Wohin geht das? – UKUser35

+0

@ UKUser35 in 'IEnumerator IEnumerable .GetEnumerator()' und 'IEnumerable.GetEnumerator()' –

+0

@ UKUser35 beachten Sie, dass die Spitze Ihrer Klasse sollte auch 'sagen: IEnumerable ', nicht ': IEnumerable' –