public PropertyDescriptor GetPropertyDescriptor(object source, string propertyName) { TypePropertyPair key = new TypePropertyPair() { type = source != null?source.GetType() : null, propertyName = propertyName }; if (key.type == null || key.propertyName == null) { return(null); } if (cache.ContainsKey(key)) { return(cache[key]); } else { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(source); PropertyDescriptor descriptor = properties == null ? null : properties.Find(propertyName, ignoreCase: true); if (descriptor == null) { return(null); } lock (cache) { if (!cache.ContainsKey(key)) { cache.Add(key, descriptor); } } return(descriptor); } }
public PropertyDescriptor GetPropertyDescriptor(object source, string propertyName) { TypePropertyPair key = new TypePropertyPair() { type = source != null ? source.GetType() : null, propertyName = propertyName }; if (key.type == null || key.propertyName == null) return null; if (cache.ContainsKey(key)) return cache[key]; else { PropertyDescriptorCollection properties = TypeDescriptor.GetProperties(source); PropertyDescriptor descriptor = properties == null ? null : properties.Find(propertyName, ignoreCase: true); if (descriptor == null) return null; lock (cache) { if (!cache.ContainsKey(key)) cache.Add(key, descriptor); } return descriptor; } }