アプリにループがあります。コードは次のとおりです:-
foreach (DataRow dr in dt.Rows)
ColorNames +=dr["ColorName"].ToString() + "\n";
\n
しかし、最後に追加したくありませんDatarow
。それを行う方法について何か提案はありますか?
ColorNames = String.Join("\n", dt.Rows.Select(dr => dr["ColorName"].ToString()));
更新されたバージョンは次のとおりです(必要なEnumerableへのキャストを忘れました):
ColorNames = String.Join("\n", dt.AsEnumerable().Select(dr => dr.Field<string>("ColorName")));
Foreachはインデックスでは機能しません。
オプション1:ForEachループ
foreachループを使用します。最後までループし、外側のループは好きです
ColorNames.Substring(0, ColorNames.Length-1);
オプション2:Forループ
forループを使用し、最後まですべてのインデックスのループ内のインデックスを確認します。\ nを追加し、最後のインデックスには\nを追加しない
for (int i = 0; i < dt.Rows.Count; i++)
{
ColorNames += i < dt.Rows.Count-1
? dr["ColorName"].ToString() + "\n"
: dr["ColorName"].ToString();
}
また
for (int i = 0; i < dt.Rows.Count; i++)
ColorNames += dr["ColorName"].ToString() + (i < dt.Rows.Count-1 ? "\n": "");
オプション3:LINQ
ColorNames = String.Join("\n", dt.Rows.Select(dr => dr["ColorName"].ToString()));
var colorNamesList = dt.Rows
.Cast<DataRow>()
.Select(dr => dr["ColorName"].ToString())
.ToArray();
var colorNames = String.Join("\n", colorNames);
int count = 0;
foreach (DataRow dr in dt.Rows)
{
count++;
ColorNames +=dr["ColorName"].ToString();
if (count < dt.Rows.Count)
ColorNames += "\n";
}