private ICustomTypeDescriptor BuildDescriptor(Type objectType) { // NOTE: "descriptors" already locked here // get the parent descriptor and add to the dictionary so that // building the new descriptor will use the base rather than recursing var descriptor = base.GetTypeDescriptor(objectType, null); descriptors.Add(objectType, descriptor); try { // build a new descriptor from this, and replace the lookup descriptor = new HyperTypeDescriptor(descriptor); descriptors[objectType] = descriptor; return(descriptor); } catch { // rollback and throw // (perhaps because the specific caller lacked permissions; // another caller may be successful) descriptors.Remove(objectType); throw; } }
#pragma warning restore 0618 private ICustomTypeDescriptor BuildDescriptor(Type objectType) { // NOTE: "descriptors" already locked here // get the parent descriptor and add to the dictionary so that // building the new descriptor will use the base rather than recursing ICustomTypeDescriptor descriptor = base.GetTypeDescriptor(objectType, null); descriptors.Add(objectType, descriptor); try { // build a new descriptor from this, and replace the lookup descriptor = new HyperTypeDescriptor(descriptor); descriptors[objectType] = descriptor; return descriptor; } catch { // rollback and throw // (perhaps because the specific caller lacked permissions; // another caller may be successful) descriptors.Remove(objectType); throw; } }
internal HyperTypeDescriptor(ICustomTypeDescriptor parent) : base(parent) { this.propertyCollections = HyperTypeDescriptor.WrapProperties(parent.GetProperties()); }