2016-05-12 6 views
0

すべての単語を4文字で表示しようとしています。しかし、なぜそれが機能していないのか分かりません。それは表示されません。linqで選択した後に配列を表示

これはコードです:

IEnumerable<string> query4 = words 
     .Where(n => n.Length == 4) 
     .Select(n => n); 

    DisplayArray(query4); 

これは私の表示方法である:

private static void DisplayArray<T>(T[] array) 
    { 
     foreach (T item in array) 
      Console.WriteLine(item); 
    } 
+2

配列ではありませんquery4'先発 'についてT[]IEnumrable<T>に変更します。 'IEnumerable 'を取るか、 'ToArray'を使うようにメソッドを変更してください。 – juharr

+0

ありがとうございます。私はlinqで知っていた。私はそれが配列のような玉虫色であることを意味します –

+1

いいえ、配列は、Linqクエリが設定されていないシーケンスを表す 'IEnumerable 'を生成する値のセットを含む構造体であり、 'foreach'か' ToList'か 'ToArray'です。それまでは、実際にはフィルタリングや投影はしません。また、それはあなたがそれを具体化するたびに、フィルタリングと投影を行います。そのため、 'ToList'で終わる多くのLinqクエリが表示されます。 – juharr

答えて

2

さて、あなたの現在のコードに応じて

private static void DisplayArray<T>(T[] array) 

が配列T[]を望んでいるが、あなただけの提供IEnumerable<string>なので、のコンパイル時間が必要ですror。最後に

// you have no need in T[], IEnumerable<T> is quite enough 
    private static void DisplayArray<T>(IEnumerable<T> array) { 
    foreach (T item in array) 
     Console.WriteLine(item); 
    } 

(、Select(n => n)冗長で、落下させることができることに注意してください):

DisplayArray(words.Where(n => n.Length == 4)); 
+0

ありがとうございました!それは助けになった。 –

+0

配列とIEnumerableに適したメソッドを作成するにはどうすればよいですか? –

+1

@sara: 'T []'(array)*は 'IEnumerable 'を実装しているので、 'IEnumerable 'のメソッドを実装していれば、配列 'T []'その逆は真ではない –

0
private static void DisplayArray(IEnumerable<string> array) 
{ 
    foreach (string item in array) 
     Console.WriteLine(item); 
} 
+0

* 'DisplayArray'メソッドが狭すぎるように見えるかもしれません。他のLinqが 'IEnumerable 'を返すとどうなりますか? –

+0

あなたが提供するIEnumerable なぜ私はそれを使用します。アドバイスありがとうございます。 –

関連する問題