2

コードは次のとおりです。

File.ReadLines(sourceFilePath).Select(line => line.Split('\t')).ToArray();

「Select」キーワードまで何が起こっているのかわかります。誰かが"line=>line.Split..で何が起こっているのかを分析してください。

私の理解では、テキストファイルを1行ずつ調べ、入力テキストの行をタブで解析および分割しています(テキストがタブで区切られていることがわかっているため)。しかし、「line => line ...」では正確に何が起こっているのでしょうか?

そして、コード行の最後で、テキストが配列に入ります。しかし、デバッグしてコードをステップ実行し、ローカルウィンドウを使用すると、読み取られたものを含む配列の名前は何ですか?配列に読み込まれたものを確認するにはどうすればよいですか?

4

4 に答える 4

5

これは、基本的に、「ファイル内の各行について、タブ文字の行を文字列の配列に分割し、それらの配列の配列を作成します(返された配列の各要素が配列になるように)」ということです。

このSelect関数は、何かのEnumerableを受け取り、各項目に関数を適用して、入力値ごとに1つの出力値を生成します。他のプログラミング言語では、これはマップまたはプロジェクションと呼ばれます。

=>は、デリゲート関数にコンパイルされるラムダ式を示します。これは「line」と呼ばれる引数を取り、その型は使用法によって推測されます(ReadLinesStringsのIEnumerableを返すため、 lineString型です)。

ラムダの本体には、最後の呼び出し(への呼び出しSplit)から得られた値の暗黙の戻り型があります。したがって、この行には「このラムダを各行で実行する」と書かれています。

.ToArray最後に、最後(ラムダの外側)での呼び出しは、IEnumerable<String[]>返されSelectたを配列の配列(String[][])に変換します。

于 2012-09-04T17:54:10.747 に答える
3

これ=>ラムダ式です。デリゲートの型またはFunctionと考えてください。から返される各アイテムはFile.Readlines、によって操作されますSelect- は、Select各行をラムダ関数line => line.Split('\t')に渡します。ラムダ関数は、単一の引数 ( という名前) を受け取り、引数lineの呼び出しの結果を返します。.Split('\t')line

于 2012-09-04T17:56:00.930 に答える
2

演算子は、Selectコレクションから別のフォームへの要素の射影を処理するために使用される LINQ 拡張メソッドです。最も一般的な使用法は、そのコレクションの要素から単一の列を選択して新しいコレクションにすることですが、より複雑な射影はラムダ式内で処理できます。

コンパイラは、メソッドによって返されるデータ型を自動的に推測するSelectため、渡したラムダの出力に依存します。あなたの場合、ラムダの出力は文字列の配列であるため、最終的にはIEnumerable<string[]>. ToArray()最後に呼び出すと、IEnumerable<string[]>を具体的な に変換しますstring[][]

于 2012-09-04T17:59:30.733 に答える
1

リンクです。

Select メソッドは IEnumerable の拡張機能であり、ラムダ式 (行 => ... の部分) を使用して、各結果を他の形式に「投影」できます。

この場合、開発者はタブ文字で各行を分割し (配列になります。これが射影です)、各結果を含む配列を取得します。

于 2012-09-04T17:57:51.033 に答える