private static Type[] GenerateEvidenceTypes(Evidence evidence, IEnumerable <Type> evidenceTypes, bool hostEvidence)
            {
                List <Type> list  = new List <Type>();
                List <Type> list2 = new List <Type>();
                List <Type> list3 = new List <Type>(ExpensiveEvidence.Count);

                foreach (Type type in evidenceTypes)
                {
                    EvidenceTypeDescriptor evidenceTypeDescriptor = evidence.GetEvidenceTypeDescriptor(type);
                    if ((hostEvidence && (evidenceTypeDescriptor.HostEvidence != null)) || (!hostEvidence && (evidenceTypeDescriptor.AssemblyEvidence != null)))
                    {
                        list.Add(type);
                    }
                    else if (ExpensiveEvidence.Contains(type))
                    {
                        list3.Add(type);
                    }
                    else
                    {
                        list2.Add(type);
                    }
                }
                Type[] array = new Type[(list.Count + list2.Count) + list3.Count];
                list.CopyTo(array, 0);
                list2.CopyTo(array, list.Count);
                list3.CopyTo(array, list.Count + list2.Count);
                return(array);
            }
        private EvidenceBase GetHostEvidenceNoLock(Type type)
        {
            EvidenceTypeDescriptor evidenceTypeDescriptor = this.GetEvidenceTypeDescriptor(type);

            if (evidenceTypeDescriptor != null)
            {
                if (evidenceTypeDescriptor.HostEvidence != null)
                {
                    return(evidenceTypeDescriptor.HostEvidence);
                }
                if ((this.m_target != null) && !evidenceTypeDescriptor.Generated)
                {
                    using (new EvidenceUpgradeLockHolder(this))
                    {
                        evidenceTypeDescriptor.Generated = true;
                        EvidenceBase base2 = this.GenerateHostEvidence(type, evidenceTypeDescriptor.HostCanGenerate);
                        if (base2 != null)
                        {
                            evidenceTypeDescriptor.HostEvidence = base2;
                            Evidence target = (this.m_cloneOrigin != null) ? (this.m_cloneOrigin.Target as Evidence) : null;
                            if (target == null)
                            {
                                return(base2);
                            }
                            using (new EvidenceLockHolder(target, EvidenceLockHolder.LockType.Writer))
                            {
                                EvidenceTypeDescriptor descriptor2 = target.GetEvidenceTypeDescriptor(type);
                                if ((descriptor2 != null) && (descriptor2.HostEvidence == null))
                                {
                                    descriptor2.HostEvidence = base2.Clone();
                                }
                            }
                        }
                        return(base2);
                    }
                }
            }
            return(null);
        }