public override bool TryConvert(ConvertBinder binder, out object result)
{
if (binder.Type == typeof (string[])) {
result = Values;
return true;
}
var ppi = binder.Type.GetPersistableInfo();
switch (ppi.PersistableCategory) {
case PersistableCategory.String:
result = Value;
return true;
case PersistableCategory.Nullable:
case PersistableCategory.Parseable:
result = binder.Type.ParseString(Value);
return true;
case PersistableCategory.Array:
case PersistableCategory.Enumerable:
if (ppi.ElementType.IsParsable()) {
result = Values.Select(each => ppi.ElementType.ParseString(each)).ToArrayOfType(ppi.ElementType);
return true;
}
break;
case PersistableCategory.Enumeration:
var value = Value;
if (Enum.IsDefined(binder.Type, value)) {
result = Enum.Parse(binder.Type, value, true);
return true;
}
break;
}
result = map.ComputedValue;
return true;
}