MonoMobile.Views.BindingExpression.CheckAndCoerceToGenericEnumerable C# (CSharp) Method

CheckAndCoerceToGenericEnumerable() private method

private CheckAndCoerceToGenericEnumerable ( Type type, object value ) : object
type System.Type
value object
return object
        private object CheckAndCoerceToGenericEnumerable(Type type, object value)
        {
            object result = value;
            if (type != null && result != null)
            {
                var isList = typeof(IEnumerable).IsAssignableFrom(type);

                if (type.IsGenericType && isList)
                {
                    var genericTypeDefinition = type.GetGenericTypeDefinition();
                    var genericType = type.GetGenericArguments().FirstOrDefault();
                    Type[] generic = { genericType };

                    result = Activator.CreateInstance(genericTypeDefinition.MakeGenericType(generic));

                    var list = result as IList;
                    if (list != null)
                        foreach (var item in (IList)value)
                            list.Add(item);
                }
            }
            return result;
        }