internal SerializationInfoEnumerator(String[] members, Object[] info, Type[] types, int numItems) {
BCLDebug.Assert(members!=null, "[SerializationInfoEnumerator.ctor]members!=null");
BCLDebug.Assert(info!=null, "[SerializationInfoEnumerator.ctor]info!=null");
BCLDebug.Assert(types!=null, "[SerializationInfoEnumerator.ctor]types!=null");
BCLDebug.Assert(numItems>=0, "[SerializationInfoEnumerator.ctor]numItems>=0");
BCLDebug.Assert(members.Length>=numItems, "[SerializationInfoEnumerator.ctor]members.Length>=numItems");
BCLDebug.Assert(info.Length>=numItems, "[SerializationInfoEnumerator.ctor]info.Length>=numItems");
BCLDebug.Assert(types.Length>=numItems, "[SerializationInfoEnumerator.ctor]types.Length>=numItems");
m_members = members;
m_data = info;
m_types = types;
//The MoveNext semantic is much easier if we enforce that [0..m_numItems] are valid entries
//in the enumerator, hence we subtract 1.
m_numItems = numItems-1;
m_currItem = -1;
m_current = false;
}