1. ホーム
  2. c#

[解決済み】List<>の最後の要素を見つけるにはどうしたらいいですか?

2022-04-07 16:06:47

質問

以下は、私のコードからの抜粋です。

public class AllIntegerIDs 
{
    public AllIntegerIDs() 
    {            
        m_MessageID = 0;
        m_MessageType = 0;
        m_ClassID = 0;
        m_CategoryID = 0;
        m_MessageText = null;
    }
    
    ~AllIntegerIDs()
    {
    }

    public void SetIntegerValues (int messageID, int messagetype,
        int classID, int categoryID)
    {
        this.m_MessageID = messageID;
        this.m_MessageType = messagetype;
        this.m_ClassID = classID;
        this.m_CategoryID = categoryID;
    }
    
    public string m_MessageText;
    public int m_MessageID;
    public int m_MessageType;
    public int m_ClassID;
    public int m_CategoryID;
}

を使おうとしているのですが、私の main() 関数のコードです。

List<AllIntegerIDs> integerList = new List<AllIntegerIDs>();

/* some code here that is ised for following assignments*/
{
   integerList.Add(new AllIntegerIDs());
   index++;
   integerList[index].m_MessageID = (int)IntegerIDsSubstring[IntOffset];
   integerList[index].m_MessageType = (int)IntegerIDsSubstring[IntOffset + 1];
   integerList[index].m_ClassID = (int)IntegerIDsSubstring[IntOffset + 2];
   integerList[index].m_CategoryID = (int)IntegerIDsSubstring[IntOffset + 3];
   integerList[index].m_MessageText = MessageTextSubstring;
}

問題はここからです。forループを使用して、Listのすべての要素を表示しようとしています。

for (int cnt3 = 0 ; cnt3 <= integerList.FindLastIndex ; cnt3++) //<----PROBLEM HERE
{
   Console.WriteLine("{0}\t{1}\t{2}\t{3}\t{4}\n", integerList[cnt3].m_MessageID,integerList[cnt3].m_MessageType,integerList[cnt3].m_ClassID,integerList[cnt3].m_CategoryID, integerList[cnt3].m_MessageText);
}

最後の要素を見つけたいので、for ループで cnt3 を等しくして、すべてのエントリを出力します。 List . リスト内の各要素は、クラス AllIntegerIDs は、上記のコードサンプルで述べたとおりです。リスト内の最後の有効なエントリーを見つけるにはどうしたらよいでしょうか?

のようなものを使用する必要があります。 integerList.Find(integerList[].m_MessageText == null; ?

もしこれを使うなら、0から最大値までのインデックスが必要です。つまり、私は使うつもりのない別のforループを使わなければならないのです。より短い/より良い方法はありますか?

どのように解決するのですか?

もし、リストの最後のアイテムにアクセスしたいだけなら、次のようにします。

if(integerList.Count>0)
{
   //  pre C#8.0 : var item = integerList[integerList.Count - 1];
   //  C#8.0 : 
   var item = integerList[^1];
}

を使用して、リスト内のアイテムの総数を取得することができます。 Count プロパティ

var itemCount = integerList.Count;