object ConvertTo(string source, Type targetType, ExpressionEvaluator evaluator) { if (targetType == typeof(ITaskItem) || targetType.IsSubclassOf(typeof(ITaskItem))) { var item = evaluator.EvaluatedTaskItems.FirstOrDefault(i => string.Equals(i.ItemSpec, source.Trim(), StringComparison.OrdinalIgnoreCase)); var ret = new TargetOutputTaskItem() { ItemSpec = source.Trim() }; if (item != null) { foreach (string name in item.MetadataNames) { ret.SetMetadata(name, item.GetMetadata(name)); } } return(ret); } if (targetType.IsArray) { return(new ArrayList(source.Split(';').Select(s => s.Trim()).Where(s => !string.IsNullOrEmpty(s)).Select(s => ConvertTo(s, targetType.GetElementType(), evaluator)).ToArray()) .ToArray(targetType.GetElementType())); } if (targetType == typeof(bool)) { switch (source != null ? source.ToLower(CultureInfo.InvariantCulture) : string.Empty) { case "true": case "yes": case "on": return(true); case "false": case "no": case "off": case "": return(false); } } return(Convert.ChangeType(source == "" ? null : source, targetType)); }
object ConvertTo (string source, Type targetType, ExpressionEvaluator evaluator) { if (targetType == typeof (ITaskItem) || targetType.IsSubclassOf (typeof (ITaskItem))) { var item = evaluator.EvaluatedTaskItems.FirstOrDefault (i => string.Equals (i.ItemSpec, source.Trim (), StringComparison.OrdinalIgnoreCase)); var ret = new TargetOutputTaskItem () { ItemSpec = source.Trim () }; if (item != null) foreach (string name in item.MetadataNames) ret.SetMetadata (name, item.GetMetadata (name)); return ret; } if (targetType.IsArray) return new ArrayList (source.Split (';').Select (s => s.Trim ()).Where (s => !string.IsNullOrEmpty (s)).Select (s => ConvertTo (s, targetType.GetElementType (), evaluator)).ToArray ()) .ToArray (targetType.GetElementType ()); if (targetType == typeof (bool)) { switch (source != null ? source.ToLower (CultureInfo.InvariantCulture) : string.Empty) { case "true": case "yes": case "on": return true; case "false": case "no": case "off": case "": return false; } } return Convert.ChangeType (source == "" ? null : source, targetType); }