2017-05-18 6 views
0

ラムダ式にはかなり新しく、Func<>の使い方を理解するための単純なプログラムを作成しようとしています。なぜ入力配列をループできないのか理解できません。インデックスを使用して?入力配列をラムダ式にインデックスする方法

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; 
     }; 

    } 
} 

これは

を言ってエラーが発生します[]型の配列

の発現にどのように私はこの問題を解決するかをインデックス化を適用することはできませんか?基本的には、入力配列をどのようにループしますか?

+0

変更アレイを<> int []に変換するか、すべての種類の配列以外のオプションを持つようにバンを実行しますか? –

+0

Works !!!しかし、型配列に何が間違っていたのですか?配列にはインデクサーがないためですか? idk – TotalGadha

+3

私は '配列'は、配列ではない 'System.Array'を指していると思います。 –

答えて

1

System.Arrayは、int[]のようなすべての配列の基本クラスです。インデックスで項目にアクセスできるようにするIListも実装していますが、Item propertyは明示的なインターフェイスメンバーの実装として実装されています。 ArrayインスタンスがIListインターフェイスにキャストされた場合にのみ使用できます。

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

は今、あなたはインデクサーを使用することができますが、それはint型のオブジェクトを返しませんので、あなたは、「オブジェクトができますので、キャストせずに、次を使用することはできませんトン>と比較する:

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

私はあなたがint[]使用したいと思います:のFuncで

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

Gracias !!これはうまくいく! – TotalGadha

1

表示する例では、配列の型を指定する必要があります。

試してみてください。代わりに

Func<int[], int> DoSomething 

関連する問題