123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- using System;
- using System.Collections.Generic;
- using System.Data;
- using System.Linq;
- using System.Text;
- namespace Ant.Common
- {
- public static class AntUtils
- {
- static List<Type> MapTypes;
- public static readonly Dictionary<Type, DbType> _typeDbTypeMap;
- static AntUtils()
- {
- var mapTypes = new List<Type>();
- mapTypes.Add(typeof(string));
- mapTypes.Add(typeof(int));
- mapTypes.Add(typeof(long));
- mapTypes.Add(typeof(decimal));
- mapTypes.Add(typeof(double));
- mapTypes.Add(typeof(float));
- mapTypes.Add(typeof(bool));
- mapTypes.Add(typeof(DateTime));
- mapTypes.Add(typeof(short));
- mapTypes.Add(typeof(Guid));
- mapTypes.Add(typeof(byte));
- mapTypes.Add(typeof(char));
- mapTypes.Add(typeof(ulong));
- mapTypes.Add(typeof(uint));
- mapTypes.Add(typeof(ushort));
- mapTypes.Add(typeof(sbyte));
- mapTypes.Add(typeof(Object));
- mapTypes.Add(typeof(byte[]));
- mapTypes.TrimExcess();
- MapTypes = mapTypes;
- var typeDbTypeMap = new Dictionary<Type, DbType>();
- typeDbTypeMap[typeof(byte)] = DbType.Byte;
- typeDbTypeMap[typeof(sbyte)] = DbType.SByte;
- typeDbTypeMap[typeof(short)] = DbType.Int16;
- typeDbTypeMap[typeof(ushort)] = DbType.UInt16;
- typeDbTypeMap[typeof(int)] = DbType.Int32;
- typeDbTypeMap[typeof(uint)] = DbType.UInt32;
- typeDbTypeMap[typeof(long)] = DbType.Int64;
- typeDbTypeMap[typeof(ulong)] = DbType.UInt64;
- typeDbTypeMap[typeof(float)] = DbType.Single;
- typeDbTypeMap[typeof(double)] = DbType.Double;
- typeDbTypeMap[typeof(decimal)] = DbType.Decimal;
- typeDbTypeMap[typeof(bool)] = DbType.Boolean;
- typeDbTypeMap[typeof(string)] = DbType.String;
- typeDbTypeMap[typeof(char)] = DbType.StringFixedLength;
- typeDbTypeMap[typeof(Guid)] = DbType.Guid;
- typeDbTypeMap[typeof(DateTime)] = DbType.DateTime;
- typeDbTypeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
- typeDbTypeMap[typeof(TimeSpan)] = DbType.Time;
- typeDbTypeMap[typeof(byte[])] = DbType.Binary;
- typeDbTypeMap[typeof(Object)] = DbType.Object;
- //var typeDbTypeMap = new Dictionary<Type, DbType>();
- // typeDbTypeMap[typeof(byte)] = DbType.Byte;
- // typeDbTypeMap[typeof(sbyte)] = DbType.SByte;
- // typeDbTypeMap[typeof(short)] = DbType.Int16;
- // typeDbTypeMap[typeof(ushort)] = DbType.UInt16;
- // typeDbTypeMap[typeof(int)] = DbType.Int32;
- // typeDbTypeMap[typeof(uint)] = DbType.UInt32;
- // typeDbTypeMap[typeof(long)] = DbType.Int64;
- // typeDbTypeMap[typeof(ulong)] = DbType.UInt64;
- // typeDbTypeMap[typeof(float)] = DbType.Single;
- // typeDbTypeMap[typeof(double)] = DbType.Double;
- // typeDbTypeMap[typeof(decimal)] = DbType.Decimal;
- // typeDbTypeMap[typeof(bool)] = DbType.Boolean;
- // typeDbTypeMap[typeof(string)] = DbType.String;
- // typeDbTypeMap[typeof(char)] = DbType.StringFixedLength;
- // typeDbTypeMap[typeof(Guid)] = DbType.Guid;
- // typeDbTypeMap[typeof(DateTime)] = DbType.DateTime;
- // typeDbTypeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset;
- // typeDbTypeMap[typeof(TimeSpan)] = DbType.Time;
- // typeDbTypeMap[typeof(byte[])] = DbType.Binary;
- // typeDbTypeMap[typeof(byte?)] = DbType.Byte;
- // typeDbTypeMap[typeof(sbyte?)] = DbType.SByte;
- // typeDbTypeMap[typeof(short?)] = DbType.Int16;
- // typeDbTypeMap[typeof(ushort?)] = DbType.UInt16;
- // typeDbTypeMap[typeof(int?)] = DbType.Int32;
- // typeDbTypeMap[typeof(uint?)] = DbType.UInt32;
- // typeDbTypeMap[typeof(long?)] = DbType.Int64;
- // typeDbTypeMap[typeof(ulong?)] = DbType.UInt64;
- // typeDbTypeMap[typeof(float?)] = DbType.Single;
- // typeDbTypeMap[typeof(double?)] = DbType.Double;
- // typeDbTypeMap[typeof(decimal?)] = DbType.Decimal;
- // typeDbTypeMap[typeof(bool?)] = DbType.Boolean;
- // typeDbTypeMap[typeof(char?)] = DbType.StringFixedLength;
- // typeDbTypeMap[typeof(Guid?)] = DbType.Guid;
- // typeDbTypeMap[typeof(DateTime?)] = DbType.DateTime;
- // typeDbTypeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset;
- // typeDbTypeMap[typeof(TimeSpan?)] = DbType.Time;
- // typeDbTypeMap[typeof(Object)] = DbType.Object;
- _typeDbTypeMap = Clone(typeDbTypeMap);
- }
- /// <summary>
- /// 将C#参数类型转换成数据库类型
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- public static DbType? TryGetDbType(Type type)
- {
- if (type == null)
- return null;
- Type unType;
- if (!IsNullable(type, out unType))
- unType = type;
- if (unType.IsEnum)
- unType = UtilConstants.TypeOfInt32;
- DbType ret;
- if (_typeDbTypeMap.TryGetValue(unType, out ret))
- return ret;
- return null;
- }
- public static void CheckNull(object obj, string paramName = null)
- {
- if (obj == null)
- throw new ArgumentNullException(paramName);
- }
- /// <summary>
- /// 判断类型是否为空没有返回值
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- public static bool IsNullable(Type type)
- {
- Type unType;
- return IsNullable(type, out unType);
- }
- /// <summary>
- /// 判断类型是否为空
- /// </summary>
- /// <param name="type"></param>
- /// <param name="unType"></param>
- /// <returns></returns>
- public static bool IsNullable(Type type, out Type unType)
- {
- unType = Nullable.GetUnderlyingType(type);//返回指定可以为 null 的类型的基础类型参数
- return unType != null;
- }
- /// <summary>
- /// 判断两个值是否相等
- /// </summary>
- /// <param name="obj1"></param>
- /// <param name="obj2"></param>
- /// <returns></returns>
- public static bool AreEqual(object obj1, object obj2)
- {
- if (obj1 == null && obj2 == null)
- return true;
- if (obj1 != null)
- {
- return obj1.Equals(obj2);
- }
- if (obj2 != null)
- {
- return obj2.Equals(obj1);
- }
- return object.Equals(obj1, obj2);
- }
- /// <summary>
- /// 判断是Type类型
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- public static bool IsMapType(Type type)
- {
- Type unType;
- if (!IsNullable(type, out unType))
- unType = type;
- if (unType.IsEnum)
- return true;
- return MapTypes.Contains(unType);
- }
- /// <summary>
- /// 是否是AnonymousType
- /// </summary>
- /// <param name="type"></param>
- /// <returns></returns>
- public static bool IsAnonymousType(Type type)
- {
- string typeName = type.Name;
- return typeName.Contains("<>") && typeName.Contains("__") && typeName.Contains("AnonymousType");
- }
- public static Dictionary<TKey, TValue> Clone<TKey, TValue>(Dictionary<TKey, TValue> source)
- {
- Dictionary<TKey, TValue> ret = new Dictionary<TKey, TValue>(source.Count);
- foreach (var kv in source)
- {
- ret.Add(kv.Key, kv.Value);
- }
- return ret;
- }
- }
- }
|