private void FilterAttributesIfNeeded()
{
if (!_attributesFiltered)
{
List<Attribute> list;
if (!_attributesFilled)
{
list = new List<Attribute>();
try
{
FillAttributes(list);
}
catch (Exception e)
{
Debug.Fail($"{_name}>>{e}");
}
}
else
{
list = new List<Attribute>(_attributes);
}
var set = new HashSet<object>();
for (int i = 0; i < list.Count;)
{
if (set.Add(list[i].TypeId))
{
++i;
}
else
{
list.RemoveAt(i);
}
}
Attribute[] newAttributes = list.ToArray();
lock (_lockCookie)
{
_attributes = newAttributes;
_attributesFiltered = true;
_attributesFilled = true;
_metadataVersion = TypeDescriptor.MetadataVersion;
}
}
}