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;
}
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了