public static IList Create(object list)
{
var type = list.ToCachedType();
if (list is GenericListAdapter || type.IsNonGenericList) return (IList)list;
if (!type.IsGenericList)
throw new ArgumentException("Generic list adapter source '{0}' is not a generic list."
.ToFormat(type.FriendlyFullName));
return new GenericListAdapter(list, type);
}