ExtendHelper
public static class ExtendHelper
{
/// <summary>
/// 检查当前字符串是否符合某种格式
/// </summary>
/// <param name="thisValue"></param>
/// <param name="pattern"></param>
/// <returns></returns>
public static bool IsMatch(this string thisValue, string regexPattern)
{
return Regex.IsMatch(thisValue, regexPattern);
} /// <summary>
/// 是否是有效的Email地址
/// </summary>
/// <param name="thisValue"></param>
/// <returns></returns>
public static bool IsEmail(this string thisValue)
{
return Regex.IsMatch(thisValue, @"\w+([-+.']\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*");
} /// <summary>
/// 如果为Null,则转换成T类型的值
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="thisValue"></param>
/// <param name="val"></param>
/// <returns></returns>
public static T IfNullThen<T>(this object thisValue, T val)
{
return thisValue == null ? val : (T)thisValue;
} #region IsIn IsNotIn /// <summary>
/// 是否在指定的字符串集合中,相当于SQL的In操作符
/// </summary>
/// <param name="thisValue"></param>
/// <param name="stringCollect"></param>
/// <returns></returns>
public static bool IsIn(this string thisValue, params string[] stringCollect)
{
if (stringCollect == null || stringCollect.Length <= )
return false; return Array.IndexOf<string>(stringCollect, thisValue) > -;
} /// <summary>
/// 当前对象是否在某集合中
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="thisValue"></param>
/// <param name="collect"></param>
/// <param name="equalLogic">判断相等的逻辑</param>
/// <returns></returns>
public static bool IsIn<T>(this T thisValue, List<T> collect, Func<T, T, bool> equalLogic)
{
if (collect == null || collect.Count <= )
return false; bool result = false;
foreach (T item in collect)
{
if (equalLogic(item, thisValue))
{
result = true;
break;
}
}
return result;
} /// <summary>
///
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="thisValue"></param>
/// <param name="collect"></param>
/// <param name="equalLogic">判断相等的逻辑</param>
/// <returns></returns>
public static bool IsNotIn<T>(this T thisValue, List<T> collect, Func<T, T, bool> equalLogic)
{
return !thisValue.IsIn(collect, equalLogic);
} #endregion /// <summary>
/// 是否以 startBy 参数开头
/// </summary>
/// <param name="thisValue"></param>
/// <param name="startWith"></param>
/// <returns></returns>
public static bool StartBy(this string thisValue, params string[] startBy)
{
foreach (string item in startBy)
{
if (thisValue.StartsWith(item))
return true;
} return false;
} /// <summary>
/// 是否以 startBy 参数开头
/// </summary>
/// <param name="thisValue"></param>
/// <param name="startBy"></param>
/// <param name="splitSign">startBy 的分隔符</param>
/// <returns></returns>
public static bool StartBy(this string thisValue, string startBy, char splitSign)
{
string[] starts = startBy.Split(splitSign);
if (starts != null && starts.Length > )
foreach (string item in starts)
{
if (thisValue.StartsWith(item))
return true;
} return false;
} /// <summary>
/// 根据指定的正则表达式进行替换
/// </summary>
/// <param name="thisValue"></param>
/// <param name="regexPattern"></param>
/// <param name="replacement"></param>
/// <returns></returns>
public static string ReplaceString(this string thisValue, string regexPattern, string replacement)
{
if (!string.IsNullOrEmpty(thisValue))
{
return Regex.Replace(thisValue, regexPattern, replacement, RegexOptions.IgnoreCase);
}
return string.Empty;
} /// <summary>
/// 根据只等的正则表达式获取字符串
/// </summary>
/// <param name="thisValue"></param>
/// <param name="regexPattern"></param>
/// <returns></returns>
public static string[] GetSubString(this string thisValue, string regexPattern)
{
string[] result = null;
MatchCollection collection = Regex.Matches(thisValue, regexPattern, RegexOptions.IgnoreCase);
if (collection != null && collection.Count > )
{
result = new string[collection.Count];
for (int i = ; i < collection.Count; i++)
{
result[i] = collection[i].Value;
}
} return result;
} /// <summary>
/// 从结果集中排除另一个结果集
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="thisList"></param>
/// <param name="rejectList"></param>
/// <param name="removeLogic">排除的逻辑</param>
/// <returns></returns>
public static List<T> Reject<T>(this List<T> thisList, List<T> rejectList, Func<T, T, bool> removeLogic)
{
foreach (var item in rejectList)
{
for (int i = ; i < thisList.Count; i++)
{
T t = thisList[i];
if (removeLogic(t, item)) thisList.Remove(t);
}
} return thisList;
} /// <summary>
/// 是在某某时间之间,包含from和to
/// </summary>
/// <param name="thisValue"></param>
/// <param name="from"></param>
/// <param name="to"></param>
/// <returns></returns>
public static bool Between(this DateTime thisValue, DateTime from, DateTime to)
{
return thisValue >= from && thisValue <= to;
} #region Transform /// <summary>
/// 从一个对象Transform到另外一个对象
/// </summary>
/// <typeparam name="S"></typeparam>
/// <typeparam name="R"></typeparam>
/// <param name="source"></param>
/// <param name="RfieldNameFunc">source对象属性名对应的Return对象的属性名,默认是source对象的属性名对应return对象的属性名</param>
/// <returns></returns>
public static R Transform<S, R>(this S source, Func<string, string> RfieldNameFunc = null) where R : new()
{
R result = new R(); result.SetProperties<S, R>(source, RfieldNameFunc); return result;
} /// <summary>
///
/// </summary>
/// <typeparam name="S"></typeparam>
/// <typeparam name="R"></typeparam>
/// <param name="sourceList"></param>
/// <param name="RfieldNameFunc">source对象属性名对应的Return对象的属性名,默认是source对象的属性名对应return对象的属性名</param>
/// <returns></returns>
public static List<R> Transform<S, R>(this IEnumerable<S> sourceList, Func<string, string> RfieldNameFunc = null) where R : new()
{
List<R> resultList = new List<R>();
foreach (S item in sourceList)
{
resultList.Add(item.Transform<S, R>(RfieldNameFunc));
} return resultList;
} /// <summary>
/// 设置属性
/// </summary>
/// <typeparam name="S"></typeparam>
/// <typeparam name="R"></typeparam>
/// <param name="thisValue"></param>
/// <param name="source"></param>
/// <param name="RfieldNameFunc">要设置属性的名字,默认是source对象的属性名对应return对象的属性名</param>
public static void SetProperties<S, R>(this R thisValue, S source, Func<string, string> RfieldNameFunc = null)
{
PropertyInfo[] sourceFields = typeof(S).GetProperties(); #region Set Result Property
if (sourceFields != null)
{
foreach (PropertyInfo sourceProperty in sourceFields)
{
PropertyInfo resultProperty = null;
foreach (var item in typeof(R).GetProperties())
{
string rfieldName = RfieldNameFunc != null ? RfieldNameFunc(sourceProperty.Name).ToLower() : sourceProperty.Name.ToLower();
if (item.Name.ToLower() == rfieldName)
{
resultProperty = item;
break;
}
} if (resultProperty != null && resultProperty.CanWrite)
{
object val = sourceProperty.GetValue(source, null);
if (resultProperty.PropertyType.IsGenericType && resultProperty.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
/* 如果目标类型是可空类型
* 1. source.value != null, 则用基类型取值,然后给目标类型赋值
* 2. source.value = null,则目标类型用默认值null
*/
if (val != null)
{
Type baseType = resultProperty.PropertyType.GetGenericArguments()[];
resultProperty.SetValue(thisValue, Convert.ChangeType(val, baseType, null), null);
}
}
else
{
/* 目标类型不是可空类型
* 1. source.value = null,则取source.value的默认值给目标类型赋值
* 2. source.value != null,则直接给目标类型赋值
*/
if (val != null)
{
resultProperty.SetValue(thisValue, Convert.ChangeType(val, resultProperty.PropertyType, null), null);
}
else
{
resultProperty.SetValue(thisValue, Convert.ChangeType(DefaultForType(resultProperty.PropertyType), resultProperty.PropertyType, null), null);
}
}
}
}
}
#endregion
} /// <summary>
/// 设置属性
/// </summary>
/// <typeparam name="S"></typeparam>
/// <typeparam name="R"></typeparam>
/// <param name="thisValue"></param>
/// <param name="source"></param>
/// <param name="RfieldNameFunc">要设置属性的名字,默认是source对象的属性名对应return对象的属性名</param>
public static void SetProperties<S, R>(this R thisValue, S source)
{
PropertyInfo[] sourceFields = typeof(S).GetProperties(); #region Set Result Property
if (sourceFields != null)
{
var entityName = typeof(S).Name;
foreach (PropertyInfo sourceProperty in sourceFields)
{
PropertyInfo resultProperty = null;
foreach (var item in typeof(R).GetProperties())
{
string rfieldName = sourceProperty.Name.ToLower();
if (item.Name.ToLower() == rfieldName)
{
resultProperty = item;
break;
}
} if (resultProperty != null && resultProperty.CanWrite)
{
object val = sourceProperty.GetValue(source, null);
if (resultProperty.PropertyType.IsGenericType && resultProperty.PropertyType.GetGenericTypeDefinition() == typeof(Nullable<>))
{
/* 如果目标类型是可空类型
* 1. source.value != null, 则用基类型取值,然后给目标类型赋值
* 2. source.value = null,则目标类型用默认值null
*/
if (val != null)
{
Type baseType = resultProperty.PropertyType.GetGenericArguments()[];
resultProperty.SetValue(thisValue, Convert.ChangeType(val, baseType, null), null);
}
}
else
{
/* 目标类型不是可空类型
* 1. source.value = null,则取source.value的默认值给目标类型赋值
* 2. source.value != null,则直接给目标类型赋值
*/
if (val != null)
{
resultProperty.SetValue(thisValue, Convert.ChangeType(val, resultProperty.PropertyType, null), null);
}
else
{
resultProperty.SetValue(thisValue, Convert.ChangeType(DefaultForType(resultProperty.PropertyType), resultProperty.PropertyType, null), null);
}
}
}
}
}
#endregion
} /// <summary>
/// 获取类型的默认值
/// </summary>
/// <param name="targetType"></param>
/// <returns></returns>
private static object DefaultForType(Type targetType)
{
object returnValue = null;
returnValue = targetType == typeof(Int32) ? default(Int32) : returnValue;
returnValue = targetType == typeof(Int64) ? default(Int64) : returnValue;
returnValue = targetType == typeof(Boolean) ? default(Boolean) : returnValue;
returnValue = targetType == typeof(DateTime) ? default(DateTime) : returnValue;
returnValue = targetType == typeof(Double) ? default(Double) : returnValue;
returnValue = targetType == typeof(float) ? default(float) : returnValue;
returnValue = targetType == typeof(Decimal) ? default(Decimal) : returnValue;
returnValue = targetType == typeof(Byte) ? default(Byte) : returnValue;
returnValue = targetType == typeof(Char) ? default(Char) : returnValue;
//returnValue = targetType == typeof(String) ? string.Empty : returnValue; return returnValue;
} #endregion }
ExtendHelper的更多相关文章
随机推荐
- C# 中 KeyPress 、KeyDown 和KeyPress的详细区别[转]
研究了一下KeyDown,KeyPress 和KeyUp ,发现之间还是有点学问的. 让我们带着如下问题来说明,如果你看到这些问题你都知道,那么这篇文章你就当复习吧:) 1.这三个事件的顺序是怎么样的 ...
- 转:简单的RTSP消息交互过程
简单的RTSP消息交互过程 C表示RTSP客户端,S表示RTSP服务端 1. 第一步:查询服务器端可用方法 1.C->S:OPTION request //询问S有哪些方法可用 ...
- SVO实时全局光照:Sparse Voxel Octree based Global Illumination (SVO GI)
功能已实现,初步集成进来,暂未进行重度优化.但GI的效果已很明显.这里特地给出了开启实时GI前后的效果对比,比对场景如下:1.只有直接光照(方向光源)的场景.2在直接光照(方向光源)基础上开启了实时G ...
- HDU 4759 Poker Shuffle
Poker Shuffle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Tot ...
- 开源Launcher - Wox 出炉了
Wox 是一款免费开源的信息快速获取软件.她的创作灵感来自于Mac上Alfred和Window上的Launchy. 目前Wox托管在Github (http://www.github.com/qian ...
- 菜鸟教程之工具使用(十四)——Maven项目右击没有“Maven”菜单选项
从Git导入一个Maven项目,右击想更新Maven引用的jar包,却发现右键菜单根本没有“Maven”菜单项.怎么办?很简单,按如下步骤操作即可: 从Git导入后,右击项目没有“Maven”菜单项: ...
- lua中常量的实现及表的深拷贝实现
废话:好久没在这里写博客了...主要原因是我买了个域名hanxi.info并在github上搭建了个人博客... lua中默认是没有c中的const常量的,在csdn上找到了一个使用setmetata ...
- 没有 RunInstallerAttribute.Yes 的公共安装程序。在 C:/Program/xx.exe 程序集中可能可以找到
今天在装服务的时候,装了半天总是提示 没有 RunInstallerAttribute.Yes 的公共安装程序.在 C:/Program/xx.exe 程序集中可能可以找到“Yes”属性. 才发现同事 ...
- uniGUI试用笔记(十四)TUniTreeView的CheckBox
TUniTreeView目前版本没有封装CheckBox功能,所以需要手工处理,幸好0.99版提供部分代码了,修改过程如下: 1.uniGUIAbstractClasses.pas单元中修改基类TUn ...
- Linux下MySQL不能远程访问
最近在Linux上装了个MySQL数据库,可是远程连接MySQL时总是报出erro 2003: Can't connect to MySQL server on '211.87.***.***' (1 ...