Esempio n. 1
0
 public static MemberInfo[] FieldsAndPropertiesOf(Type type)
 {
     if (type == null)
     {
         throw new ArgumentNullException("Cannot get fields and properties of null type!");
     }
     lock (String.Intern($"ACCESS_MEMBER_CACHE_{type.Name}")) {
         if (!MembersCache.ContainsKey(type))
         {
             MembersCache[type] = CollectMembers(type).ToArray();
         }
         // It is not clear rather the .Net Runtime caches or not
         // the member info or if they do lookups all the time
         // It could be good to cache this, but I'm not sure yet.
         return(MembersCache[type]);
     }
 }
        internal static IMemberDefinition GetMember(string assemblyFilePath, uint moduleToken, uint typeToken, uint memberToken, SupportedLanguage language)
        {
            MembersCacheKey key = new MembersCacheKey()
            {
                AssemblyFilePath = assemblyFilePath, ModuleToken = moduleToken, TypeToken = typeToken, MemberToken = memberToken
            };

            IMemberDefinition result;

            if (!MembersCache.TryGetValue(key, out result))
            {
                TypeDefinition type = GetTypeDefinition(assemblyFilePath, moduleToken, typeToken);
                IEnumerable <IMemberDefinition> typeMembers = type.GetMembersSorted(true, GetLanguage(language));
                result = typeMembers.Where(x => x.MetadataToken.ToUInt32() == memberToken).FirstOrDefault();
                MembersCache.Add(key, result);
            }

            return(result);
        }