Beispiel #1
0
        private Func <object, string> GetConverterForType(Type propertyType)
        {
            if (propertyType.IsEnum)
            {
                return(o => ((Enum)o).GetDisplayName());
            }
            if (typeof(string).IsAssignableFrom(propertyType))
            {
                return(o => (string)o); //Prevent futher conversion
            }

            var enumerableArg = LambdaHelpers.GetEnumerableType(propertyType);

            if (enumerableArg != null)
            {
                return(LambdaHelpers.GetEnumerableConvertor(GetConverterForType(enumerableArg)));
            }

            if (typeof(IEnumerable).IsAssignableFrom(propertyType))
            {
                return(LambdaHelpers.GetEnumerableConvertor(item => item.ToString()));
            }
            return
                (DisplayFunctions.Where(
                     displayFunction => displayFunction.Key.IsAssignableFrom(propertyType))
                 .Select(kv => kv.Value)
                 .FirstOrDefault() ?? (arg => arg?.ToString()));
        }