/// <summary>Converts all the elements of a sequence</summary> /// <returns>New sequence with all the converted elements</returns> public static IEnumerable <R> ConvertAll <T, R>([NotNull] this IFdbConverter <T, R> converter, [NotNull] IEnumerable <T> items) { if (converter == null) { throw new ArgumentNullException("converter"); } if (items == null) { throw new ArgumentNullException("items"); } foreach (var item in items) { yield return(converter.Convert(item)); } }
/// <summary>Registers a new type converter</summary> /// <typeparam name="T">Source type</typeparam> /// <typeparam name="R">Destination type</typeparam> /// <param name="converter">Instance that can convert values of type <typeparamref name="T"/> into a values of type <typeparamref name="R"/></param> public static void Register <T, R>([NotNull] IFdbConverter <T, R> converter) { if (converter == null) { throw new ArgumentNullException("converter"); } while (true) { var previous = Converters; var dic = new Dictionary <ComparisonHelper.TypePair, IFdbConverter>(previous, previous.Comparer); dic[new ComparisonHelper.TypePair(typeof(T), typeof(R))] = converter; if (Interlocked.CompareExchange(ref Converters, dic, previous) == previous) { break; } } }
public static R[] ConvertAll <T, R>([NotNull] this IFdbConverter <T, R> converter, [NotNull] T[] items) { if (converter == null) { throw new ArgumentNullException("converter"); } if (items == null) { throw new ArgumentNullException("items"); } var results = new R[items.Length]; for (int i = 0; i < items.Length; i++) { results[i] = converter.Convert(items[i]); } return(results); }
public static List <R> ConvertAll <T, R>([NotNull] this IFdbConverter <T, R> converter, [NotNull] List <T> items) { if (converter == null) { throw new ArgumentNullException("converter"); } if (items == null) { throw new ArgumentNullException("items"); } #if CORE_CLR var list = new List <R>(items.Count); foreach (var item in items) { list.Add(converter.Convert(item)); } return(list); #else return(items.ConvertAll <R>(converter.Convert)); #endif }