using NetWorkHelper.Helper;
using NetWorkHelper.ICommond;
using System;
using System.Collections.Generic;
namespace NetWorkHelper.ICollections
{
///
/// CollectionConverter 用于转换集合内的元素或集合类型。
///
public static class CollectionConverter
{
#region ConvertAll
///
/// ConvertAll 将source中的每个元素转换为TResult类型
///
public static List ConvertAll(IEnumerable source, CommonMethod.Func converter)
{
return CollectionConverter.ConvertSpecification(source, converter, null);
}
#endregion
#region ConvertSpecification
///
/// ConvertSpecification 将source中的符合predicate条件元素转换为TResult类型
///
public static List ConvertSpecification(IEnumerable source, CommonMethod.Func converter, Predicate predicate)
{
List list = new List();
CollectionHelper.ActionOnSpecification(source, delegate (TObject ele) { list.Add(converter(ele)); }, predicate);
return list;
}
#endregion
#region ConvertFirstSpecification
///
/// ConvertSpecification 将source中的符合predicate条件的第一个元素转换为TResult类型
///
public static TResult ConvertFirstSpecification(IEnumerable source, CommonMethod.Func converter, Predicate predicate)
{
TObject target = CollectionHelper.FindFirstSpecification(source, predicate);
if (target == null)
{
return default(TResult);
}
return converter(target);
}
#endregion
#region CopyAllToList
public static List CopyAllToList(IEnumerable source)
{
List copy = new List();
CollectionHelper.ActionOnEach(source, delegate (TObject t) { copy.Add(t); });
return copy;
}
#endregion
#region CopySpecificationToList
public static List CopySpecificationToList(IEnumerable source, Predicate predicate)
{
List copy = new List();
CollectionHelper.ActionOnSpecification(source, delegate (TObject t) { copy.Add(t); }, predicate);
return copy;
}
#endregion
#region ConvertListUpper
///
/// ConvertListUpper 将子类对象集合转换为基类对象集合
///
public static List ConvertListUpper(IList list) where T : TBase
{
List baseList = new List(list.Count);
for (int i = 0; i < list.Count; i++)
{
baseList.Add(list[i]);
}
return baseList;
}
#endregion
#region ConvertListDown
///
/// ConvertListDown 将基类对象集合强制转换为子类对象集合
///
public static List ConvertListDown(IList baseList) where T : TBase
{
List list = new List(baseList.Count);
for (int i = 0; i < baseList.Count; i++)
{
list.Add((T)baseList[i]);
}
return list;
}
#endregion
#region ConvertArrayToList
///
/// ConverArrayToList 将数组转换为List
///
public static List ConvertArrayToList(TElement[] ary)
{
if (ary == null)
{
return null;
}
return CollectionHelper.Find(ary, null);
}
#endregion
#region ConvertListToArray
///
/// ConverListToArray 将List转换为数组
///
public static TElement[] ConvertListToArray(IList list)
{
if (list == null)
{
return null;
}
TElement[] ary = new TElement[list.Count];
for (int i = 0; i < ary.Length; i++)
{
ary[i] = list[i];
}
return ary;
}
#endregion
}
}