First, I apologize. My code was not correct, and I'm sure that added to the confusion. Now, al is ArrayList al, and the reason I need al[0] is to see if two ArrayLists contained in "allEntries" have the same value stored in index 0. I have tried it when al[0] and al[1] contain the same values, and when they contain different values. The result is the same, ie, in the anonymous function, al[0] sometimes gives the values of al[1]. Here is my code again: List allEntries = new List(); byte id0 = 0, id1 = 1; byte sid1 = 16, sid2 = 88, sid3 = 100; ArrayList entry1 = new ArrayList(); ArrayList entry2 = new ArrayList(); ArrayList entry3 = new ArrayList(); entry1.Add(id0); entry1.Add(sid1); entry1.Add("John"); entry1.Add("Doe"); entry2.Add(id1); entry2.Add(sid2); entry2.Add("Jane"); entry2.Add("Doe"); entry3.Add(id0); // notice index 0 of entry3 and entry1 contains id0 entry3.Add(sid3); entry3.Add("Joe"); entry3.Add("Doe"); allEntries.Add(entry1); allEntries.Add(entry2); allEntries.Add(entry3); for (byte i = 0; i < 2; i++) { List sameIdEntries = allEntries.FindAll(delegate(ArrayList al) { return((byte)al[0] == i); }); // do stuff } // for Any help is appreciated!