panel
This commit is contained in:
642
NetPanel.Help/ExtendHelper.cs
Normal file
642
NetPanel.Help/ExtendHelper.cs
Normal file
@@ -0,0 +1,642 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Security.Cryptography;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
|
||||
namespace NetPanel.Help
|
||||
{
|
||||
public static class ExtendHelper
|
||||
{
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 扩展帮助类
|
||||
/// </summary>
|
||||
|
||||
#region int
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 转换指定时间得到对应的时间戳
|
||||
/// true 则生成13位的时间戳,
|
||||
/// false 则生成10位的时间戳,默认为 true
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="isLongTime">精度(毫秒)设置 true,则生成13位的时间戳;精度(秒)设置为 false,则生成10位的时间戳;默认为 true </param>
|
||||
/// <returns>返回对应的时间戳</returns>
|
||||
public static long ToTimeStamp(this DateTime s, bool isLongTime = true)
|
||||
{
|
||||
var ts = s.ToUniversalTime() - new DateTime(1970, 1, 1, 0, 0, 0, 0);
|
||||
return isLongTime ? Convert.ToInt64(ts.TotalMilliseconds) : Convert.ToInt64(ts.TotalSeconds);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 取整 有小数进1
|
||||
/// </summary>
|
||||
/// <param name="d"></param>
|
||||
/// <param name="decimals"></param>
|
||||
/// <returns></returns>
|
||||
public static int ToInteger(this double d)
|
||||
{
|
||||
return Math.Ceiling(d).ToInt32();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 转换为Double 如果为空返回0
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static double ToDouble(this object s, double e = 0)
|
||||
{
|
||||
if (s == null || s == string.Empty)
|
||||
{
|
||||
return e;
|
||||
}
|
||||
return Convert.ToDouble(s);
|
||||
}
|
||||
/// <summary>
|
||||
/// 转换为int 如果为空返回0
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static int ToInt32(this object s, int e = 0)
|
||||
{
|
||||
if (s == null || s == string.Empty)
|
||||
{
|
||||
return e;
|
||||
}
|
||||
return Convert.ToInt32(s);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
|
||||
#region bool
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断 为空
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsNull(this string s)
|
||||
{
|
||||
return string.IsNullOrWhiteSpace(s);
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断 不为空
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static bool IsNotNull(this string s)
|
||||
{
|
||||
return !string.IsNullOrWhiteSpace(s);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 判断是否 等于 字符串 true 包含 false 不包含
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="sArrStr"></param>
|
||||
/// <returns></returns>
|
||||
public static bool AndEquals(this string s, params string[] sArrStr)
|
||||
{
|
||||
for (int i = 0; i < sArrStr.Length; i++)
|
||||
{
|
||||
if (!s.Equals(sArrStr[i], StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断是否 包含等于 字符串 true 包含 false 不包含
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="sArrStr"></param>
|
||||
/// <returns></returns>
|
||||
public static bool OrEquals(this string s, params string[] sArrStr)
|
||||
{
|
||||
for (int i = 0; i < sArrStr.Length; i++)
|
||||
{
|
||||
if (s.Equals(sArrStr[i], StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断是否 包含 字符串 true 包含 false 不包含
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="sArrStr"></param>
|
||||
/// <returns></returns>
|
||||
public static bool AndContains(this string s, params string[] sArrStr)
|
||||
{
|
||||
for (int i = 0; i < sArrStr.Length; i++)
|
||||
{
|
||||
if (s.IndexOf(sArrStr[i], StringComparison.OrdinalIgnoreCase) <= -1)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 判断是否 包含 字符串 true 包含 false 不包含
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="sArrStr"></param>
|
||||
/// <returns></returns>
|
||||
public static bool OrContains(this string s, params string[] sArrStr)
|
||||
{
|
||||
for (int i = 0; i < sArrStr.Length; i++)
|
||||
{
|
||||
if (s.IndexOf(sArrStr[i], StringComparison.OrdinalIgnoreCase) > -1)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region DateTime
|
||||
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 字符串转换为 时间
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime ToDateTime(this object s)
|
||||
{
|
||||
return Convert.ToDateTime(s);
|
||||
}
|
||||
/// <summary>
|
||||
/// 字符串转换为 时间
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime ToDateTime(this string s)
|
||||
{
|
||||
return Convert.ToDateTime(s);
|
||||
}
|
||||
/// <summary>
|
||||
/// 时间戳转为C#格式时间
|
||||
/// </summary>
|
||||
/// <param name="timeStamp"></param>
|
||||
/// <returns></returns>
|
||||
public static DateTime ToDateTimeByStamp(this string timeStamp)
|
||||
{
|
||||
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
|
||||
long lTime;
|
||||
if (timeStamp.Length.Equals(10))//判断是10位
|
||||
{
|
||||
lTime = long.Parse(timeStamp + "0000000");
|
||||
}
|
||||
else
|
||||
{
|
||||
lTime = long.Parse(timeStamp + "0000");//13位
|
||||
}
|
||||
TimeSpan toNow = new TimeSpan(lTime);
|
||||
DateTime daTime = dtStart.Add(toNow);
|
||||
return daTime;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region double
|
||||
|
||||
/// <summary>
|
||||
/// 带小数点数字匹配
|
||||
/// </summary>
|
||||
/// <param name="input"></param>
|
||||
/// <returns></returns>
|
||||
public static double MatchingNumber(this string s)
|
||||
{
|
||||
string s1 = Regex.Replace(s, @"[^\d.\d]", "");
|
||||
if (s1.IsNotNull())
|
||||
{
|
||||
return s1.ToDouble();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
/// <summary>
|
||||
/// 保留小数点 不四舍五入
|
||||
/// </summary>
|
||||
/// <param name="d"></param>
|
||||
/// <param name="decimals"></param>
|
||||
/// <returns></returns>
|
||||
public static double NotRound(this double d, int decimals)
|
||||
{
|
||||
if (decimals == 0)
|
||||
{
|
||||
return (int)d;
|
||||
}
|
||||
string sStr = "1";
|
||||
for (int i = 0; i < decimals; i++)
|
||||
{
|
||||
sStr += "0";
|
||||
}
|
||||
decimals = Convert.ToInt32(sStr);
|
||||
return Math.Floor(d * decimals) / decimals;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 实现数据的四舍五入法
|
||||
/// </summary>
|
||||
/// <param name="v">要进行处理的数据</param>
|
||||
/// <param name="x">保留的小数位数</param>
|
||||
/// <returns>四舍五入后的结果</returns>
|
||||
public static double Round(this double v, int x)
|
||||
{
|
||||
bool isNegative = false;
|
||||
//如果是负数
|
||||
if (v < 0)
|
||||
{
|
||||
isNegative = true;
|
||||
v = -v;
|
||||
}
|
||||
int IValue = 1;
|
||||
for (int i = 1; i <= x; i++)
|
||||
{
|
||||
IValue = IValue * 10;
|
||||
}
|
||||
double Int = Math.Round(v * IValue + 0.5, 0);
|
||||
v = Int / IValue;
|
||||
|
||||
if (isNegative)
|
||||
{
|
||||
v = -v;
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取百分比 iCount=总数
|
||||
/// </summary>
|
||||
/// <param name="d"></param>
|
||||
/// <param name="iCount"></param>
|
||||
/// <returns></returns>
|
||||
public static double getProportion(this double d, double iCount)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
double dc = Math.Round((d / iCount) * 100, 2);
|
||||
if (double.IsNaN(dc))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return dc;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取百分比 iCount=总数
|
||||
/// </summary>
|
||||
/// <param name="d"></param>
|
||||
/// <param name="iCount"></param>
|
||||
/// <returns></returns>
|
||||
public static double getProportion(this int d, double iCount)
|
||||
{
|
||||
|
||||
try
|
||||
{
|
||||
double dc = Math.Round((d / iCount) * 100, 2);
|
||||
if (double.IsNaN(dc))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return dc;
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 转换为 double
|
||||
/// </summary>
|
||||
/// <param name="d"></param>
|
||||
/// <param name="decimals"></param>
|
||||
/// <returns></returns>
|
||||
public static double ToDouble(this object d)
|
||||
{
|
||||
return Convert.ToDouble(d);
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region string
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 格式化ToString不会返回null
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToString(this object s, string e="")
|
||||
{
|
||||
if (s == null || s == string.Empty)
|
||||
{
|
||||
return e;
|
||||
}
|
||||
return s.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// url 编码
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlEncode(this object s, Encoding e = null)
|
||||
{
|
||||
if (e == null) e = Encoding.UTF8;
|
||||
return System.Web.HttpUtility.UrlEncode(s.ToString(), e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// url 解码
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <param name="e"></param>
|
||||
/// <returns></returns>
|
||||
public static string UrlDecode(this object s, Encoding e = null)
|
||||
{
|
||||
if (e == null) e = Encoding.UTF8;
|
||||
return System.Web.HttpUtility.UrlDecode(s.ToString(), e);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数字 千位分隔符
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToThousandsSeparator(this double s)
|
||||
{
|
||||
return s.ToString("N0");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 数字 千位分隔符
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToThousandsSeparator(this int s)
|
||||
{
|
||||
return s.ToString("N0");
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 将c# DateTime时间格式转换为Unix时间戳格式 13位
|
||||
/// </summary>
|
||||
/// <param name="time">时间</param>
|
||||
/// <returns>long</returns>
|
||||
public static string ToTimeStamp13(this System.DateTime time)
|
||||
{
|
||||
System.DateTime startTime = TimeZone.CurrentTimeZone.ToLocalTime(new System.DateTime(1970, 1, 1, 0, 0, 0, 0));
|
||||
long t = (time.Ticks - startTime.Ticks) / 10000; //除10000调整为13位
|
||||
return t.ToString();
|
||||
}
|
||||
/// <summary>
|
||||
/// 将c# DateTime时间格式转换为Unix时间戳格式 10位
|
||||
/// </summary>
|
||||
/// <param name="time">时间</param>
|
||||
/// <returns>long</returns>
|
||||
public static string ToTimeStamp10(this System.DateTime time)
|
||||
{
|
||||
DateTime dateStart = new DateTime(1970, 1, 1, 8, 0, 0);
|
||||
int timeStamp = Convert.ToInt32((time - dateStart).TotalSeconds);
|
||||
return timeStamp.ToString(); ;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 截取字符串 过滤空格
|
||||
/// </summary>
|
||||
/// <param name="s"></param>
|
||||
/// <returns></returns>
|
||||
public static string[] SplitRemoveEmptyEntries(this string s, params string[] arr)
|
||||
{
|
||||
try
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(s))
|
||||
{
|
||||
return new string[] { };
|
||||
}
|
||||
return s.Split(arr, StringSplitOptions.RemoveEmptyEntries);
|
||||
}
|
||||
catch (Exception)
|
||||
{
|
||||
return new string[] { };
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 过滤sql 特殊符号
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string ReplaceSQLChar(this string str)
|
||||
{
|
||||
if (str == String.Empty)
|
||||
return String.Empty;
|
||||
str = str.Replace("'", "");
|
||||
str = str.Replace("<", "");
|
||||
str = str.Replace(">", "");
|
||||
str = str.Replace("@", "");
|
||||
str = str.Replace("=", "");
|
||||
str = str.Replace("+", "");
|
||||
str = str.Replace("*", "");
|
||||
str = str.Replace("&", "");
|
||||
str = str.Replace("#", "");
|
||||
str = str.Replace("%", "");
|
||||
str = str.Replace("$", "");
|
||||
|
||||
//删除与数据库相关的词
|
||||
str = Regex.Replace(str, "select", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "insert", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "delete from", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "count", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "drop table", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "asc", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "mid", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "char", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "xp_cmdshell", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "exec master", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "net localgroup administrators", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "and", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "net user", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "or", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "net", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "-", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "delete", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "drop", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "script", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "update", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "and", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "chr", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "master", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "truncate", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "declare", "", RegexOptions.IgnoreCase);
|
||||
str = Regex.Replace(str, "mid", "", RegexOptions.IgnoreCase);
|
||||
|
||||
return str;
|
||||
}
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 将DateTime 格式转换为 yyyy-MM-dd HH:mm:ss
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToDateStr(this DateTime d)
|
||||
{
|
||||
return d.ToString("yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
/// <summary>
|
||||
/// 将DateTime 格式转换为 yyyy-MM-dd HH:mm:ss
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string ToDateStr(this DateTime? d)
|
||||
{
|
||||
return Convert.ToDateTime(d).ToString("yyyy-MM-dd HH:mm:ss");
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Md5 加密
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetMD5Hash(this string str)
|
||||
{
|
||||
using (MD5 mi = MD5.Create())
|
||||
{
|
||||
byte[] buffer = Encoding.Default.GetBytes(str);
|
||||
//开始加密
|
||||
byte[] newBuffer = mi.ComputeHash(buffer);
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (int i = 0; i < newBuffer.Length; i++)
|
||||
{
|
||||
sb.Append(newBuffer[i].ToString("x2"));
|
||||
}
|
||||
return sb.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region T
|
||||
/// <summary>
|
||||
/// 对象拷贝
|
||||
/// </summary>
|
||||
/// <param name="obj">被复制对象</param>
|
||||
/// <returns>新对象</returns>
|
||||
public static T CopyOjbect<T>(T obj)
|
||||
{
|
||||
Object targetDeepCopyObj = null;
|
||||
if ((T)obj == null)
|
||||
{
|
||||
return (T)targetDeepCopyObj;
|
||||
}
|
||||
Type targetType = obj.GetType();
|
||||
//值类型
|
||||
if (targetType.IsValueType == true)
|
||||
{
|
||||
targetDeepCopyObj = obj;
|
||||
}
|
||||
//引用类型
|
||||
else
|
||||
{
|
||||
targetDeepCopyObj = System.Activator.CreateInstance(targetType); //创建引用对象
|
||||
System.Reflection.MemberInfo[] memberCollection = obj.GetType().GetMembers();
|
||||
|
||||
foreach (System.Reflection.MemberInfo member in memberCollection)
|
||||
{
|
||||
//拷贝字段
|
||||
if (member.MemberType == System.Reflection.MemberTypes.Field)
|
||||
{
|
||||
System.Reflection.FieldInfo field = (System.Reflection.FieldInfo)member;
|
||||
Object fieldValue = field.GetValue(obj);
|
||||
if (fieldValue is ICloneable)
|
||||
{
|
||||
field.SetValue(targetDeepCopyObj, (fieldValue as ICloneable).Clone());
|
||||
}
|
||||
else
|
||||
{
|
||||
field.SetValue(targetDeepCopyObj, CopyOjbect(fieldValue));
|
||||
}
|
||||
|
||||
}//拷贝属性
|
||||
else if (member.MemberType == System.Reflection.MemberTypes.Property)
|
||||
{
|
||||
System.Reflection.PropertyInfo myProperty = (System.Reflection.PropertyInfo)member;
|
||||
|
||||
MethodInfo info = myProperty.GetSetMethod(false);
|
||||
if (info != null)
|
||||
{
|
||||
try
|
||||
{
|
||||
object propertyValue = myProperty.GetValue(obj, null);
|
||||
if (propertyValue is ICloneable)
|
||||
{
|
||||
myProperty.SetValue(targetDeepCopyObj, (propertyValue as ICloneable).Clone(), null);
|
||||
}
|
||||
else
|
||||
{
|
||||
myProperty.SetValue(targetDeepCopyObj, CopyOjbect(propertyValue), null);
|
||||
}
|
||||
}
|
||||
catch (System.Exception ex)
|
||||
{
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return (T)targetDeepCopyObj;
|
||||
|
||||
}
|
||||
#endregion
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user