2017-05-18 3 views
0

Ich bin ziemlich neu zu Lambda-Ausdrücke und versuche, ein einfaches Programm hier zu schreiben, um die Verwendung von Func<> zu verstehen und kann nicht verstehen, warum ich ein Eingabearray nicht durchlaufen kann Indizierung verwenden?Wie indexieren wir durch ein Eingabearray zu einem Lambda-Ausdruck

class Program 
{ 
    static void Main(string[] args) 
    { 
     int[] array = new int[4]; 
     array[0] = -1; array[1] = 2; array[2] = 3; array[3] = 8; 

     Func<Array, int> DoSomething = inputarray => 
     { 
      for (int i = 0; i < inputarray.Length; i++) 
      { 
       if (inputarray[i] > inputarray[i + 1]) 
       { 
        //; 
       } 

      } 
      return 1; 
     }; 

    } 
} 

Dies gibt eine Fehlermeldung,

nicht Indizierung gelten mit [] auf einen Ausdruck vom Typ Array

Wie kann ich dieses Problem lösen? Wie würde ich mein Eingangsarray durchlaufen?

+0

ändern Array in Func <> zu int [] oder du hast eine Option, die alle Arten von Arrays ausschließt –

+0

Works .. !!! Aber was war falsch mit Typ Array? Liegt es daran, dass Arrays keine Indexer haben? IDK – TotalGadha

+3

Ich denke 'Array' bezieht sich auf' System.Array', die nicht genau ein Array ist. –

Antwort

1

Eine System.Array ist die Basisklasse aller Arrays wie ein int[]. Es implementiert auch IList, die den Zugriff auf Elemente nach Index ermöglicht, aber Item property ist als explizite Implementierung eines Schnittstellenmembers implementiert. Er kann nur verwendet werden, wenn die Array-Instanz in eine IList-Schnittstelle umgewandelt wird:

var list = (System.Collections.IList)inputarray; 

Jetzt können Sie den Indexer verwenden, aber es wird Objekte nicht Ints zurückkehren, so können Sie folgende nicht verwenden, ohne da zu Gießen Objekte können‘ t mit > verglichen werden:

if (list[i] > list[i + 1]) 
{ 
    //; 
} 

ich denke, man eine int[] verwenden möchten:

Func<int[], int> DoSomething = inputarray => 
// ... 
+0

Gracias !! Das funktioniert gut !! – TotalGadha

1

Sie müssen einen Typ für das Array in dem Beispiel angeben, das Sie anzeigen.

Versuch:

Func<int[], int> DoSomething 

statt.

Verwandte Themen