あなたはLINQのタグを使用しているとして、私はあなたがしたいあなたを想定しますコードをlinq文に変換します。
あなたはそれを言及していませんが、あなたのdt
はDataTableであり、dt.Rows
はDataRowCollection
を返すと思います。このコレクションはIEnumerable<Row>
を実装しています。明らかに、には文字列を返すGetData
があります。
だからあなたdt.Rows
が文字列に変換するためのステップは簡単です:
var linesWithoutPause = dt.Rows // returns DataRowCollection
.Cast<Row>() // converts to IEnumerable<Row>
.Select(row => row.GetData()); // from exvery Row extract the data
は今、あなたはすべての50番目の行の後に単語「一時停止」を書きたいです。この単語を50行目ごとに追加するか、別の行として追加するかを指定する必要はありません。コードは非常に似ています。
Linqのようにするには、そのための拡張関数を作成することをお勧めします。拡張機能の詳細については、Extension Functions Demystified
を入力してください。count
の各項目の後にタイプのオブジェクトを追加する汎用拡張機能IEnumerableを作成します。この方法で、あらゆる種類のコレクションに使用できます:10の整数ごとに0を追加します。 20音ごとにビープ音を付加する。
拡張機能は静的なクラスでなければならない。名前は重要ではありません:
static class EnumerableExtensions
{
// add your extension functions here
}
拡張機能はかなり簡単です。静的でなければならず、最初のパラメータはIEnumerable型で、キーワードthisの前にある必要があります。今すぐ戻ってあなたの質問に
public static AppendWordEveryCount<T>(this IEnumerable<T> source, T itemToAppend, int count)
{
int counter = 0; // a counter to find every count element
foreach (T item in source)
{
yield return T; // just return the item in your sequence
counter = (counter + 1) % count;
if (i == 0) // after count elements
{
yield return wordToAppend; // append the item
}
}
}
:このなしだったかのかのようにこのパラメータは関数の内部で使用しています
const string wordToAppend = "Pause";
const int lineCount = 50;
var result = dt.Rows
.Cast<Row>()
.Select(row => row.GetData())
.AppendWordEveryCount(wordtToAppend, lineCount);
:あなたはすべての50番目の行の後に別の行として「一時停止」を追加したいです
あなたのデータは何ですか?ファイルにはすでにコンテンツが含まれていますか?何を試しましたか? –
改行時に文字列を分割します:\ n、50回ごとにパウゼを追加してください!ごきげんよう!あなたのコードを教えてください? –
このコードは、私が1000のコレクション – peter