Example #1
0
 public override T this[string name]
 {
     get
     {
         using (PSObject.memberResolution.TraceScope("Lookup", new object[0]))
         {
             PSMemberInfo info;
             object       mshOwner;
             if (string.IsNullOrEmpty(name))
             {
                 throw PSTraceSource.NewArgumentException("name");
             }
             if (this.mshOwner != null)
             {
                 PSMemberInfoInternalCollection <PSMemberInfo> internals;
                 this.EnsureReservedMemberIsLoaded(name);
                 mshOwner = this.mshOwner;
                 if (PSObject.HasInstanceMembers(this.mshOwner, out internals))
                 {
                     info = internals[name];
                     T local = info as T;
                     if (local != null)
                     {
                         PSObject.memberResolution.WriteLine("Found PSObject instance member: {0}.", new object[] { name });
                         return(local);
                     }
                 }
             }
             else
             {
                 info     = this.memberSetOwner.InternalMembers[name];
                 mshOwner = this.memberSetOwner.instance;
                 T local2 = info as T;
                 if (local2 != null)
                 {
                     PSObject.memberResolution.WriteLine("Found PSMemberSet member: {0}.", new object[] { name });
                     info.ReplicateInstance(mshOwner);
                     return(local2);
                 }
             }
             if (mshOwner != null)
             {
                 mshOwner = PSObject.AsPSObject(mshOwner);
                 foreach (CollectionEntry <T> entry in this.collections)
                 {
                     T local3 = entry.GetMember((PSObject)mshOwner, name);
                     if (local3 != null)
                     {
                         if (entry.ShouldCloneWhenReturning)
                         {
                             local3 = (T)local3.Copy();
                         }
                         if (entry.ShouldReplicateWhenReturning)
                         {
                             local3.ReplicateInstance(mshOwner);
                         }
                         return(local3);
                     }
                 }
             }
             return(default(T));
         }
     }
 }