public static Variance DetailedCompare <T>(this T val1, T val2, string fieldName) { return(typeof(IEnumerable).IsAssignableFrom(typeof(T)) ? TExtensions.enumerableCompare(val1, val2, fieldName) : typeof(T).IsPrimitive ? TExtensions.valueCompare(val1, val2, fieldName) : TExtensions.objectCompare(val1, val2, fieldName)); }