私はリストフィールドを追加しているC#のリストを持っています。これが私のサンプルコードです。
List<> rows = new List<>();
foreach (User user in users)
{
try
{
Row row = new Row();
row.cell = new string[11];
row.cell[1] = user."";
row.cell[0] = user."";
row.cell[2] = user."";
rows.Add(row);
if (row.cell[0].Equals("Something"))
{
//here i have to write code to remove last row from the list
//row means all the last three fields
}
}
だから私の質問は、C#のリストから最後の行を削除する方法です。私を助けてください。
この質問に対する直接的な答えは次のとおりです。
if(rows.Any()) //prevent IndexOutOfRangeException for empty list
{
rows.RemoveAt(rows.Count - 1);
}
しかし...この質問の特定のケースでは、そもそも行を追加しない方が理にかなっています。
Row row = new Row();
//...
if (!row.cell[0].Equals("Something"))
{
rows.Add(row);
}
TBH、さらにテストして_"Something"
に対してuser.""
、および条件が満たされない限りRow
をインスタンス化することさえしませんが、user.""
はコンパイルされません。読者のための演習として残しておきます。
これを行う最も効率的な方法は、 RemoveAt
を使用することだと思います:
rows.RemoveAt(rows.Count - 1)
rows.RemoveAt(rows.Count - 1);
List<T>.RemoveAt
メソッドを使用できます:
rows.RemoveAt(rows.Count -1);
より頻繁に行う必要がある場合は、最後の要素をポップする独自のメソッドを作成することもできます。このようなもの:
public void pop(List<string> myList) {
myList.RemoveAt(myList.Count - 1);
}
またはvoidの代わりに、次のような値を返すこともできます。
public string pop (List<string> myList) {
// first assign the last value to a seperate string
string extractedString = myList(myList.Count - 1);
// then remove it from list
myList.RemoveAt(myList.Count - 1);
// then return the value
return extractedString;
}
2番目のメソッドの戻り値の型がvoidではないことに注意してください。これはstring b/cであり、この関数が文字列を返すようにします...