有升级,增加了方法!!实用!
又累计了一个扩展方法,方便处理元素!哈哈 征服世界指日可待!!
但是这个方法对原始数据做了改变,所以不小心使用可能会发生“令程序员毛骨悚然的恐怖错误”!
//-----------------------------------------------------------------------
// <filename>ExpandFunc.cs</filename>
// <author>weilai(魏莱)</author>
// <date>2017-3-24</date>
// <remark></remark>
//-----------------------------------------------------------------------
using System;
using System.Collections.Generic;
using System.Linq;
namespace Wl.ss.Common
{
/// <summary>
/// 扩展方法容器
/// </summary>
public static class ExpandFunc
{
#region --移除指定或者保留指定--
/// <summary>
/// 移除或者保留元素 :
/// isRemove=true, predicate为true时会移除;
/// isRemove=false, predicate为true时会保留(predicate为false时会移除);
/// 改变了原始数据,请小心使用,否则会发生“另程序员毛骨悚然的恐怖错误”!
/// </summary>
/// <typeparam name="T">具体类型</typeparam>
/// <param name="self"> IList扩展 </param>
/// <param name="isRemove">是否移除,条件成功移除,反之,条件成功保留</param>
/// <param name="checker">判断谓词</param>
public static void RemoveOrHold<TSource>(this IList<TSource> self, bool isRemove, Func<TSource, bool> predicate)
{
if (self != null && self.Count() > 0)
{
int count = self.Count();
for (int i = count - 1; i >= 0; i--)
{
var item = self.ElementAt(i);
if (predicate != null)
{
var predicateResult = predicate(item);
if (isRemove && predicateResult)
{
self.RemoveAt(i);
}
else if (!isRemove && !predicateResult)
{
self.RemoveAt(i);
}
}
}
}
}
#endregion --移除指定或者保留指定--
#region --简化验证--
/// <summary>
/// string.IsNullOrWiteSpace的简化版
/// 支持检测null的字符类型(好tm强大)
/// </summary>
/// <param name="self">扩展字符串</param>
/// <returns></returns>
public static bool NullEmpty(this string self) => string.IsNullOrWhiteSpace(self);
#endregion --简化验证--
#region --创建一个属于 IList 的 foreach循环--
/// <summary>
/// 创建一个属于 IList 的 foreach循环
/// </summary>
/// <typeparam name="TData">容器内实体</typeparam>
/// <param name="self">队列容器</param>
/// <param name="action">执行动作</param>
public static void Foreach<TData>(this IList<TData> self, Action<TData> action)
{
foreach (var item in self)
{
action(item);
}
}
#endregion --创建一个属于 IList 的 foreach循环--
#region --返回带index索引的foreach--
/// <summary>
/// 返回带index索引的foreach
/// </summary>
/// <typeparam name="T">实体</typeparam>
/// <param name="source">源容器实体</param>
/// <returns></returns>
public static IEnumerable<Tuple<int, T>> ForeachWithIndex<T>(IEnumerable<T> source)
{
for (int i = 0; i < source.Count(); i++)
{
var souTemp = source.ElementAt(i);
yield return new Tuple<int, T>(i, souTemp);
}
}
#endregion --返回带index索引的foreach--
}
}