public Evidence(Evidence evidence)
 {
     this.m_evidence = new Dictionary <Type, EvidenceTypeDescriptor>();
     if (evidence != null)
     {
         using (new EvidenceLockHolder(evidence, EvidenceLockHolder.LockType.Reader))
         {
             foreach (KeyValuePair <Type, EvidenceTypeDescriptor> pair in evidence.m_evidence)
             {
                 EvidenceTypeDescriptor descriptor = pair.Value;
                 if (descriptor != null)
                 {
                     descriptor = descriptor.Clone();
                 }
                 this.m_evidence[pair.Key] = descriptor;
             }
             this.m_target = evidence.m_target;
             this.m_locked = evidence.m_locked;
             this.m_deserializedTargetEvidence = evidence.m_deserializedTargetEvidence;
             if (evidence.Target != null)
             {
                 this.m_cloneOrigin = new WeakReference(evidence);
             }
         }
     }
     this.m_evidenceLock = new ReaderWriterLock();
 }
 internal Evidence(IRuntimeEvidenceFactory target)
 {
     this.m_evidence = new Dictionary <Type, EvidenceTypeDescriptor>();
     this.m_target   = target;
     foreach (Type type in RuntimeEvidenceTypes)
     {
         this.m_evidence[type] = null;
     }
     this.QueryHostForPossibleEvidenceTypes();
     this.m_evidenceLock = new ReaderWriterLock();
 }