/// <summary> /// 指定されたインデックスパラメータを使用するインデクサへのアクセスを提供する<see cref="IndexerReflector{T}"/>を返します /// </summary> /// <param name="indexes">インデクサインデックスのパラメータ</param> /// <exception cref="System.MemberAccessException">指定されたインデクサは存在しません</exception> public IndexerReflector <T> IndexerExact <T>(params ReflectionParameter[] indexes) { PropertyInfo info = null; var key = ("Indexer:" + string.Join(",", indexes.Select(t => { return(t.Type.Name); }))).GetHashCode(); if (!Propertys.TryGetValue(key, out info)) { if (!PropertyReflector <T> .TryGetIndexerInfo(m_Reflector.Flags, m_Type, indexes.Select(i => i.Type).ToArray(), out info)) { throw new MemberAccessException("指定されたインデクサは存在しません"); } Propertys.Add(key, info); } return(new IndexerReflector <T>(info, m_InstanceObject, indexes)); }
/// <summary> /// 指定された名前のプロパティへのアクセスを提供する<see cref="PropertyReflector{T}"/>を返します。 /// </summary> /// <param name="name">プロパティの名前を表す文字列</param> /// <typeparam name="T">プロパティの型</typeparam> /// <returns></returns> /// <exception cref="System.MemberAccessException">指定されたプロパティは存在しません</exception> public PropertyReflector <T> Property <T>(string name) { PropertyInfo info = null; var key = name.GetHashCode(); if (!Propertys.TryGetValue(key, out info)) { if (!PropertyReflector <T> .TryGetPropertyInfo(m_Reflector.Flags, m_Type, name, out info)) { throw new MemberAccessException("指定されたプロパティは存在しません"); } Propertys.Add(key, info); } return(new PropertyReflector <T>(info, m_InstanceObject)); }