using System;
using System.Reflection;
namespace WebApplication1
{
/// <summary>
/// 对空值的处理。
/// </summary>
public class Null
{
public Null()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
// 各类型的空值表示值
public static short NullShort
{
get
{
return -1;
}
}
public static int NullInteger
{
get
{
return -1;
}
}
public static Single NullSingle
{
get
{
return Single.MinValue;
}
}
public static double NullDouble
{
get
{
return double.MinValue;
}
}
public static decimal NullDecimal
{
get
{
return decimal.MinValue;
}
}
public static DateTime NullDate
{
get
{
return DateTime.MinValue;
}
}
public static string NullString
{
get
{
return "";
}
}
public static bool NullBoolean
{
get
{
return false;
}
}
public static Guid NullGuid
{
get
{
return Guid.Empty;
}
}
/// <summary>
/// 根据类型设置空值。如果objValue值不为空,返回。
/// </summary>
/// <param name="objValue"></param>
/// <param name="objField"></param>
/// <returns></returns>
public static object SetNull(object objValue, object objField)
{
object ret;
if (objValue is DBNull)
{
if (objField is short)
{
ret = NullShort;
}
else if (objField is int)
{
ret = NullInteger;
}
else if (objField is Single)
{
ret = NullSingle;
}
else if (objField is double)
{
ret = NullDouble;
}
else if (objField is decimal)
{
ret = NullDecimal;
}
else if (objField is DateTime)
{
ret = NullDate;
}
else if (objField is string)
{
ret = NullString;
}
else if (objField is bool)
{
ret = NullBoolean;
}
else if (objField is Guid)
{
ret = NullGuid;
}
else
{
ret = null;
}
}
else
{
ret = objValue;
}
return ret;
}
/// <summary>
/// 根据PropertyInfo来设计空值。
/// </summary>
/// <param name="objPropertyInfo"></param>
/// <returns></returns>
public static object SetNull(PropertyInfo objPropertyInfo)
{
object ret;
switch (objPropertyInfo.PropertyType.ToString())
{
case "System.Int16":
ret = NullShort;
break;
case "System.Int32":
case "System.Int64":
ret = NullInteger;
break;
case "System.Single":
ret = NullSingle;
break;
case "System.Double":
ret = NullDouble;
break;
case "System.Decimal":
ret = NullDecimal;
break;
case "System.DateTime":
ret = NullDate;
break;
case "System.String":
case "System.Char":
ret = NullString;
break;
case "System.Boolean":
ret = NullBoolean;
break;
case "System.Guid":
ret = NullGuid;
break;
default:
Type pType = objPropertyInfo.PropertyType;
if (pType.BaseType.Equals(typeof(System.Enum)))
{
Array objEnumValues = Enum.GetValues(pType);
Array.Sort(objEnumValues);
ret = Enum.ToObject(pType, objEnumValues.GetValue(0));
}
else
{
ret = null;
}
break;
}
return ret;
}
/// <summary>
/// 根据FieldInfo来设计空值。
/// </summary>
/// <param name="objFieldInfo"></param>
/// <returns></returns>
public static object SetNull(FieldInfo objFieldInfo)
{
object ret;
switch (objFieldInfo.FieldType.ToString())
{
case "System.Int16":
ret = NullShort;
break;
case "System.Int32":
case "System.Int64":
ret = NullInteger;
break;
case "System.Single":
ret = NullSingle;
break;
case "System.Double":
ret = NullDouble;
break;
case "System.Decimal":
ret = NullDecimal;
break;
case "System.DateTime":
ret = NullDate;
break;
case "System.String":
case "System.Char":
ret = NullString;
break;
case "System.Boolean":
ret = NullBoolean;
break;
case "System.Guid":
ret = NullGuid;
break;
default:
Type pType = objFieldInfo.FieldType;
if (pType.BaseType.Equals(typeof(System.Enum)))
{
Array objEnumValues = Enum.GetValues(pType);
Array.Sort(objEnumValues);
ret = Enum.ToObject(pType, objEnumValues.GetValue(0));
}
else
{
ret = null;
}
break;
}
return ret;
}
/// <summary>
/// 根据数据类型,取得空值。
/// 如果objField为空,则返回objDBNull。
/// </summary>
/// <param name="objField"></param>
/// <param name="objDBNull"></param>
/// <returns></returns>
public static object GetNull(object objField, object objDBNull)
{
object ret = objField;
if (objField == null)
{
ret = objDBNull;
}
else if (objField is short)
{
if (Convert.ToInt16(objField) == NullShort)
{
ret = objDBNull;
}
}
else if (objField is int)
{
if (Convert.ToInt32(objField) == NullInteger)
{
ret = objDBNull;
}
}
else if (objField is Single)
{
if (Convert.ToSingle(objField) == NullSingle)
{
ret = objDBNull;
}
}
else if (objField is double)
{
if (Convert.ToDouble(objField) == NullDouble)
{
ret = objDBNull;
}
}
else if (objField is decimal)
{
if (Convert.ToDecimal(objField) == NullDecimal)
{
ret = objDBNull;
}
}
else if (objField is DateTime)
{
if (Convert.ToDateTime(objField) == NullDate.Date)
{
ret = objDBNull;
}
}
else if (objField is string)
{
if (objField == null)
{
ret = objDBNull;
}
}
else if (objField is bool)
{
if (Convert.ToBoolean(objField) == NullBoolean)
{
ret = objDBNull;
}
}
else if (objField is Guid)
{
if (((Guid)objField).Equals(NullGuid))
{
ret = objDBNull;
}
}
return ret;
}
/// <summary>
/// 判断某个值是否为空值
/// </summary>
/// <param name="objField"></param>
/// <returns></returns>
public static bool IsNull(object objField)
{
bool ret;
if (objField != null)
{
if (objField is int)
{
ret = objField.Equals(NullInteger);
}
else if (objField is Single)
{
ret = objField.Equals(NullSingle);
}
else if (objField is double)
{
ret = objField.Equals(NullDouble);
}
else if (objField is decimal)
{
ret = objField.Equals(NullDecimal);
}
else if (objField is DateTime)
{
DateTime objDate = Convert.ToDateTime(objField);
ret = objDate.Equals(NullInteger);
}
else if (objField is string)
{
ret = objField.Equals(NullString);
}
else if (objField is bool)
{
ret = objField.Equals(NullBoolean);
}
else if (objField is Guid)
{
ret = objField.Equals(NullGuid);
}
else
{
ret = false;
}
}
else
{
ret = true;
}
return ret;
}
}
}