以下是摘自我的代码:

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循环打印列表中的所有元素:

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循环。有更短/更好的路吗?


当前回答

要获取集合的最后一项,请使用LastOrDefault()和last()扩展方法

var lastItem = integerList.LastOrDefault();

OR

var lastItem = integerList.Last();

请记住使用System.Linq;添加,否则此方法将不可用。

其他回答

使用Count属性。最后一个索引是Count - 1。

for (int cnt3 = 0 ; cnt3 < integerList.Count; cnt3++)

与你最初的问题无关,如果你捕获局部变量的引用而不是多次索引到你的列表中,你会得到更好的性能:

AllIntegerIDs ids = new AllIntegerIDs();
ids.m_MessageID = (int)IntegerIDsSubstring[IntOffset];
ids.m_MessageType = (int)IntegerIDsSubstring[IntOffset + 1];
ids.m_ClassID = (int)IntegerIDsSubstring[IntOffset + 2];
ids.m_CategoryID = (int)IntegerIDsSubstring[IntOffset + 3];
ids.m_MessageText = MessageTextSubstring;
integerList.Add(ids);

在for循环中:

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

要获取集合的最后一项,请使用LastOrDefault()和last()扩展方法

var lastItem = integerList.LastOrDefault();

OR

var lastItem = integerList.Last();

请记住使用System.Linq;添加,否则此方法将不可用。

如果您只想访问列表中的最后一项,您可以这样做

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;

为什么不直接使用List上的Count属性呢?

for(int cnt3 = 0; cnt3 < integerList.Count; cnt3++)