// 30May2013-08:11UTC chinajade public static string Analyze( XElement xElement, Func <IEnumerable <WoWObject> > candidateTargets, Func <WoWObject, List <string> > targetExclusionChecksProvider) { Contract.Requires(candidateTargets != null, context => "candidateTargets != null"); Contract.Requires(targetExclusionChecksProvider != null, context => "funcTargetExclusionCheck != null"); var excludedUnitReasons = new StringBuilder(); foreach (var wowObject in candidateTargets()) { List <string> reasons = targetExclusionChecksProvider(wowObject); if (reasons.Count > 0) { excludedUnitReasons.AppendFormat(" {0} [{1}]{2}", wowObject.SafeName, string.Join(", ", reasons), Environment.NewLine); } } if (excludedUnitReasons.Length > 0) { excludedUnitReasons.Insert(0, string.Format("{0}Excluded Units:{0}", Environment.NewLine)); excludedUnitReasons.AppendFormat("{0} {1}", Environment.NewLine, QBCLog.GetXmlFileReference(xElement)); } return(excludedUnitReasons.ToString()); }