diff --git a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs index bd60a46b95..e23d6f1471 100644 --- a/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs +++ b/src/Avalonia.Diagnostics/Diagnostics/ViewModels/PropertyViewModel.cs @@ -25,54 +25,47 @@ namespace Avalonia.Diagnostics.ViewModels return "(null)"; } - //Check if there's an user-provided ToString(), prefer that over the TypeDescriptor conversion - if (value.GetType().GetMethod(nameof(ToString), System.Type.EmptyTypes) - .DeclaringType != typeof(object)) + var converter = TypeDescriptor.GetConverter(value); + + //CollectionConverter does not deliver any important information. It just displays "(Collection)". + if (!converter.CanConvertTo(typeof(string)) || + converter.GetType() == typeof(CollectionConverter)) { return value.ToString(); } - try - { - var converter = TypeDescriptor.GetConverter(value); + return converter.ConvertToString(value); + } + + private static object InvokeParse(string s, Type targetType) + { + var method = targetType.GetMethod("Parse", PublicStatic, null, StringIFormatProviderParameters, null); - return converter.ConvertToString(value); + if (method != null) + { + return method.Invoke(null, new object[] { s, CultureInfo.InvariantCulture }); } - catch + + method = targetType.GetMethod("Parse", PublicStatic, null, StringParameter, null); + + if (method != null) { - return value.ToString(); + return method.Invoke(null, new object[] { s }); } + + throw new InvalidCastException("Unable to convert value."); } protected static object ConvertFromString(string s, Type targetType) { - try - { - var converter = TypeDescriptor.GetConverter(targetType); + var converter = TypeDescriptor.GetConverter(targetType); - if (converter.CanConvertFrom(typeof(string))) - { - return converter.ConvertFrom(null, CultureInfo.InvariantCulture, s); - } - } - catch + if (converter.CanConvertFrom(typeof(string))) { - var method = targetType.GetMethod("Parse", PublicStatic, null, StringIFormatProviderParameters, null); - - if (method != null) - { - return method.Invoke(null, new object[] { s, CultureInfo.InvariantCulture }); - } - - method = targetType.GetMethod("Parse", PublicStatic, null, StringParameter, null); - - if (method != null) - { - return method.Invoke(null, new object[] { s }); - } + return converter.ConvertFrom(null, CultureInfo.InvariantCulture, s); } - throw new InvalidCastException("Unable to convert value."); + return InvokeParse(s, targetType); } } }