CollectionExtensions
Defines typed IEnumerable extension methods.
using System;
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Linq;
namespace Relativity.DataExchange
{
internal static class CollectionExtensions
{
public static string ToCsv<T>(this IEnumerable<T> sequence)
{
return sequence.ToCsv((T arg) => arg.ToString());
}
public static string ToCsv<T>(this IEnumerable<T> sequence, Func<T, string> itemStringifier)
{
return sequence.ToDelimitedString(",", itemStringifier);
}
public static string ToDelimitedString<T>(this IEnumerable<T> sequence, string delimiter, Func<T, string> itemStringifier)
{
if (itemStringifier == null)
throw new ArgumentNullException("itemStringifier");
if (sequence == null)
return null;
return string.Join(delimiter, sequence.Select(itemStringifier));
}
[SuppressMessage("Microsoft.Design", "CA1026:DefaultParametersShouldNotBeUsed", Justification = "For backwards compatibility concerns.")]
public static string ToDelimitedString<T>(this IEnumerable<T> sequence, string delimiter = ",", string bound = "", string cellFormat = "{0}")
{
return sequence.ToDelimitedString(delimiter, (T x) => string.Format(bound + cellFormat + bound, x.ToString()));
}
public static bool IsNullOrEmpty<T>(this IEnumerable<T> sequence)
{
if (sequence != null)
return !sequence.Any();
return true;
}
public static bool In<T>(this T source, params T[] collection)
{
return collection.Contains(source);
}
public static IEnumerable<T> GetRange<T>(this IEnumerable<T> items, int beginIndex, int length)
{
T[] array = new T[length];
List<T> list = items.ToList();
for (int i = beginIndex; i <= beginIndex + length - 1; i++) {
array[i] = list[i];
}
return array;
}
}
}