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));
        }
Exemple #2
0
		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);
		}