public virtual void RemoveAt(int index)
{
if (index < 0)
throw new ArgumentOutOfRangeException("index", index, "Argument cannot be negative.");
if (index >= _data.Count)
throw new ArgumentOutOfRangeException("index", index, "Argument must be less than Count.");
int count = --_data.Count;
FieldInfo[] items = _data.Items;
if (index < count)
Array.Copy(items, index + 1, items, index, count - index);
items[count] = null;
}