示例#1
0
 public static bool Equals(ReflectionLookupKey key1, ReflectionLookupKey key2)
 {
     return(key1.HashCode == key2.HashCode
            //&& key1.LookupType == key2.LookupType
            && key1.Type == key2.Type &&
            key1.BindingFlags == key2.BindingFlags &&
            key1.MemberName == key2.MemberName);
 }
示例#2
0
 public static bool Equals(ReflectionLookupKey key, int lookupType, int hashCode, Type type, string memberName, BindingFlags bindingFlags)
 {
     return(key.HashCode == hashCode
            //&& key.LookupType == lookupType
            && key.Type == type &&
            key.BindingFlags == bindingFlags &&
            key.MemberName == memberName);
 }
示例#3
0
        public static PropertyInfo[] GetProperties(Type type, string name, BindingFlags flags)
        {
            var map      = (ReflectionLookupHashMap)Cache.ReadMap;
            var retArray = (PropertyInfo[])map.Get(LookupTypeProperty, type, name, flags);

            if (retArray != null)
            {
                return(retArray);
            }

            // Try the ConcurrentMap again, with its special write handling
            var key = new ReflectionLookupKey(LookupTypeProperty, type, name, flags);

            retArray = (PropertyInfo[])Cache.Get(key);
            if (retArray != null)
            {
                return(retArray);
            }

            retArray = GetProperties(type, flags).Where(p => p.Name == name);

            Cache.Put(key, retArray);
            return(retArray);
        }