public ITypeDescriptor CloneAndMapNestedTypes(ITypeDescriptorCallbacks typeSerializers, Func<ITypeDescriptor, ITypeDescriptor> map)
{
var tds = new ITypeDescriptor[_fields.Count];
for (var i = 0; i < _fields.Count; i++)
{
tds[i] = map(_fields[i].Value);
}
if (typeSerializers == _typeSerializers && tds.SequenceEqual(_fields.Select(i => i.Value)))
return this;
var nfs = new List<KeyValuePair<string, ITypeDescriptor>>(tds.Length);
for (var i = 0; i < _fields.Count; i++)
{
nfs.Add(new KeyValuePair<string, ITypeDescriptor>(_fields[i].Key,tds[i]));
}
return new ObjectTypeDescriptor(typeSerializers, _name, Sealed, nfs);
}