逆水行船

别人的天堂,是我的异乡;无端的繁华,倍添我的惆怅

 

DNN学习笔记-代码学习:Null

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;
  }
 }
}

posted on 2005-07-26 13:04  荣-  阅读(265)  评论(0编辑  收藏  举报

导航