电脑桌面
添加蚂蚁七词文库到电脑桌面
安装后可以在桌面快捷访问

C#对象深拷贝DeepClone

来源:金蝶云社区作者:金蝶2024-09-161

C#对象深拷贝DeepClone

#region 程序集 Kingdee.BOS, Version=7.7.2388.8, Culture=neutral, PublicKeyToken=null
// D:\WorkSpace\K3Cloud\BIN\Kingdee.BOS.dll
// Decompiled with ICSharpCode.Decompiler 3.1.0.3652
#endregion
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.Xml.Serialization;

namespace Kingdee.BOS.Util
{
	public static class ObjectUtils
	{
		/// <summary>
		/// 判断指定的对象是否是空引用,或空字符串。
		/// </summary>
		/// <param name="value">需要测试的对象</param>
		/// <returns>如果 value 参数为空引用或空字符串 (""),则为 true;否则为 false。</returns>
		public static bool IsNullOrEmpty(this object value)
		{
			if (value != null && value != DBNull.Value && value.ToString().Length != 0)
			{
				return false;
			}
			return true;
		}

		/// <summary>
		/// 判断指定的对象是否是空引用,或空字符串, 或空白字符。
		/// </summary>
		/// <param name="value">需要测试的对象</param>
		/// <returns>如果 value 参数为空引用或空字符串 ("")或空白字符,则为 true;否则为 false。</returns>
		public static bool IsNullOrEmptyOrWhiteSpace(this object value)
		{
			if (value != null && value != DBNull.Value && value.ToString().Length != 0 && !string.IsNullOrWhiteSpace(value.ToString()))
			{
				return false;
			}
			return true;
		}

		/// <summary>
		/// 为对象创建一个拷贝
		/// </summary>
		/// <param name="obj">需要创建拷贝的对象</param>
		/// <returns>新建立的拷贝对象</returns>
		public static object CreateCopy(object obj)
		{
			return CreateCopy(obj, FormatterType.BinaryFormatter);
		}

		/// <summary>
		/// 为对象创建一个拷贝
		/// </summary>
		/// <param name="obj">需要创建拷贝的对象</param>
		/// <param name="formatterType">格式类型</param>
		/// <returns>新建立的拷贝对象</returns>
		public static object CreateCopy(object obj, FormatterType formatterType)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Expected O, but got Unknown
			if (obj == null)
			{
				return null;
			}
			object obj2 = null;
			using (MemoryStream memoryStream = new MemoryStream())
			{
				IFormatter formatter = null;
				formatter = ((formatterType != FormatterType.NetDataContract) ? new BinaryFormatter() : ((IFormatter)new NetDataContractSerializer()));
				formatter.Serialize(memoryStream, obj);
				memoryStream.Position = 0L;
				obj2 = formatter.Deserialize(memoryStream);
				memoryStream.Close();
				memoryStream.Dispose();
				formatter = null;
				return obj2;
			}
		}

		/// <summary>
		/// 将对象序列化为字节流
		/// </summary>
		/// <param name="obj">需要序列化的对象</param>
		/// <returns>序列化后的字节流</returns>
		public static byte[] GetObjectSream(object obj)
		{
			if (obj == null)
			{
				return null;
			}
			byte[] array = null;
			using (MemoryStream memoryStream = new MemoryStream())
			{
				IFormatter formatter = new BinaryFormatter();
				formatter.Serialize(memoryStream, obj);
				array = memoryStream.ToArray();
				memoryStream.Close();
				memoryStream.Dispose();
				return array;
			}
		}

		/// <summary>
		/// 将字节流反序列化为对象
		/// </summary>
		/// <param name="bytes">需要反序列化的字节流</param>
		/// <returns>反序列化后的对象</returns>
		public static object GetObject(byte[] bytes)
		{
			if (bytes == null)
			{
				return null;
			}
			object obj = null;
			using (MemoryStream memoryStream = new MemoryStream(bytes))
			{
				IFormatter formatter = new BinaryFormatter();
				obj = formatter.Deserialize(memoryStream);
				memoryStream.Close();
				memoryStream.Dispose();
				return obj;
			}
		}

		/// <summary>
		/// 判断返回主键值是否是一个无效的值。
		/// </summary>
		/// <param name="pkValue">主键值</param>
		/// <returns>主键值是一个无效的值,则为 true;否则为 false。</returns>
		public static bool IsEmptyPrimaryKey(this object pkValue)
		{
			if (pkValue == null)
			{
				return true;
			}
			string text = pkValue as string;
			if (text != null)
			{
				return string.IsNullOrWhiteSpace(text);
			}
			if (pkValue is int)
			{
				return (int)pkValue == 0;
			}
			if (pkValue is long)
			{
				return (long)pkValue == 0;
			}
			if (pkValue.GetType().IsValueType)
			{
				object objA = Activator.CreateInstance(pkValue.GetType());
				return object.Equals(objA, pkValue);
			}
			return false;
		}

		/// <summary>
		/// 返回字符串
		/// </summary>
		/// <param name="obj"></param>
		/// <returns></returns>
		public static string Object2String(object obj)
		{
			if (obj != null)
			{
				return obj.ToString();
			}
			return "";
		}

		/// <summary>
		/// 得到对象对应的数值
		/// </summary>
		/// <param name="obj">要转换的对象</param>
		/// <param name="iDefaultValue">默认值</param>
		/// <returns>得到的int值</returns>
		public static int Object2Int(object obj, int iDefaultValue = 0)
		{
			if (obj.IsNullOrEmptyOrWhiteSpace())
			{
				return iDefaultValue;
			}
			try
			{
				return Convert.ToInt32(obj);
			}
			catch
			{
				return iDefaultValue;
			}
		}

		/// <summary>
		/// 得到对象对应的数值
		/// </summary>
		/// <param name="obj">要转换的对象</param>
		/// <param name="iDefaultValue">默认值</param>
		/// <returns>得到的bool值</returns>
		public static bool Object2Bool(object obj, bool iDefaultValue = false)
		{
			if (obj.IsNullOrEmptyOrWhiteSpace())
			{
				return iDefaultValue;
			}
			try
			{
				return Convert.ToBoolean(obj);
			}
			catch
			{
				return iDefaultValue;
			}
		}

		/// <summary>
		/// 得到对象对应的数值
		/// </summary>
		/// <param name="obj">要转换的对象</param>
		/// <param name="iDefaultValue">默认值</param>
		/// <returns>得到的int值</returns>
		public static long Object2Int64(object obj, long iDefaultValue = 0L)
		{
			if (obj.IsNullOrEmptyOrWhiteSpace())
			{
				return iDefaultValue;
			}
			tr

C#对象深拷贝DeepClone

#region 程序集 Kingdee.BOS, Version=7.7.2388.8, Culture=neutral, PublicKeyToken=null// D:\WorkSpace\K3Cloud\BIN\Kingdee.BOS.dll// ...
点击下载文档文档为doc格式

声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。

已经是第一篇
确认删除?
回到顶部
客服QQ
  • 客服QQ点击这里给我发消息
QQ群
  • 答案:my7c点击这里加入QQ群
支持邮箱
微信
  • 微信