关于泛型约束的问题

猴头 2013-09-17 04:16:09

/// <summary>
/// 通过对象的序列化实现对象的深拷贝
/// </summary>
/// <typeparam name="T">对象类型</typeparam>
/// <param name="RealObject">原始对象</param>
/// <returns>原始对象的深拷贝</returns>
public static T CloneObj<T>(T RealObject)
where T : BaseElement
{
using (Stream objectStream = new MemoryStream())
{
//利用 System.Runtime.Serialization序列化与反序列化完成引用对象的复制
IFormatter formatter = new BinaryFormatter();
formatter.Serialize(objectStream, RealObject);
objectStream.Seek(0, SeekOrigin.Begin);
return (formatter.Deserialize(objectStream) as T);
}
}


函数在声明的时候指定了 where T : BaseElement T必须派生自 BaseElement,那么 我在 方法中 还要不要判断 传递过来的参数 是不是 BaseElement类型呢??
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
猴头 2013-09-18
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
但是要判断是否是null。 CloneObj(阿猫阿狗 as BaseElement); 这个也能通过编译
那我就在外面 判断 null 吧
zyouhua83 2013-09-17
  • 打赏
  • 举报
回复
相信我,不用!我经常用这东西
phommy 2013-09-17
  • 打赏
  • 举报
回复
不需要 我装了resharper,要是加了反而会是一个warning (Redundant cast)
cheng2005 2013-09-17
  • 打赏
  • 举报
回复
泛型其实是设计时的概念,编译时的检查是泛型的优点之一。 所以,如果调用的地方传递过来的类型不符合那么编译就会报错,不会到运行时的。
threenewbee 2013-09-17
  • 打赏
  • 举报
回复
但是要判断是否是null。 CloneObj(阿猫阿狗 as BaseElement); 这个也能通过编译
clark523 2013-09-17
  • 打赏
  • 举报
回复
不需要。如果传入参不是显式的继承于BaseElement将会编译器报错
全栈极简 2013-09-17
  • 打赏
  • 举报
回复
应该不需要吧?否则编译器会提示错误的。

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧