public Array ReadEnumeratedArray(string fieldName, System.Type enumType)
{
if (enumType == null) throw new ArgumentNullException("enumType");
bool isNil = false;
List<Enum> enums = new List<Enum>();
if (BeginField(fieldName, true, out isNil))
{
XmlQualifiedName xmlName = EncodeableFactory.GetXmlName(enumType);
PushNamespace(xmlName.Namespace);
while (MoveToElement(xmlName.Name))
{
enums.Add(ReadEnumerated(xmlName.Name, enumType));
}
// check the length.
if (m_context.MaxArrayLength > 0 && m_context.MaxArrayLength < enums.Count)
{
throw new ServiceResultException(StatusCodes.BadEncodingLimitsExceeded);
}
PopNamespace();
EndField(fieldName);
Array values = Array.CreateInstance(enumType, enums.Count);
for (int ii = 0; ii < enums.Count; ii++)
{
values.SetValue(enums[ii], ii);
}
return values;
}
if (isNil)
{
return null;
}
return Array.CreateInstance(enumType, 0);
}
#endregion