建议35:使用default为泛型类型变量指定初始值

有些算法,比如泛型集合List<T>的Find算法,所查找的对象可能会是值类型,也有可能是引用类型。在这种算法内部,我们常常会为这些值类型或引用类型变量指定默认值。于是,问题来了:值类型变量的默认初始值是0值,而引用类型变量的默认初始值是null值,显然,这会导致下面的编译出错:

        public T Func<T>()
{
T t = null;return t;
}

无法将 null 转换为类型参数“T”,因为它可能是一种不可为 null 的值类型。请考虑改用“default(T)”。

        public T Func<T>()
{
T t = ;
return t;
}

无法将类型“int”隐式转换为“T”。

所以上面的代码应该改为:

        public T Func<T>()
{
T t = default(T);
return t;
}

这样,如果它在运行时碰到T是一个整型,那么运行时会为其赋值0;如果T在运行时是一个Person这样的引用类型,则会为其赋null值。

List<T>的Find方法源码为:

[__DynamicallyInvokable]
public T Find(Predicate<T> match)
{
if (match == null)
{
ThrowHelper.ThrowArgumentNullException(ExceptionArgument.match);
}
for (int i = ; i < this._size; i++)
{
if (match(this._items[i]))
{
return this._items[i];
}
}
return default(T);
}

转自:《编写高质量代码改善C#程序的157个建议》陆敏技

最新文章

  1. asp.net gridview 鼠标悬浮提示信息
  2. Python自动化之sqlalchemy复合外键
  3. 轻松学习RSA加密算法原理
  4. javaweb学习总结二十五(response对象的用法一)
  5. Tomcat就是个容器,一种软件
  6. (转)SSI开发环境搭建
  7. WCf的理解
  8. css权威指南(上)
  9. 关于typedef的用法总结
  10. HDU 5523 Game
  11. 添加网站QQ客服链接
  12. Web Api HttpWebRequest 请求 Api 及 异常处理
  13. Java集合之Stack
  14. placeholde属性在IE10以下浏览器上的兼容方案
  15. javascript设计模式阅读后的感悟与总结
  16. 不能靠眼睛之 KEIL 中失效代码灰暗特性
  17. Tomcat8源码笔记(四)Server和Service初始化
  18. C++ code:位操作实例(bit operation example)
  19. 深度学习Bible学习笔记:第一章 前言
  20. POJ 2752 Seek the Name, Seek the Fame(KMP中next的理解)题解

热门文章

  1. linux系统无法挂载U盘
  2. classpath和环境变量设置
  3. java图形用户界面边界布局管理器
  4. 多线程设计模式(二):Future模式
  5. Spring启动后获取所有拥有特定注解的Bean,注解的属性值
  6. oracle 11g r2 rac +openfiler 2.99 +centos 6.5+vbox
  7. 使用QuartZ.net来做定时计划任务 ; 值不能为 null。 参数名: assemblyString
  8. linux平台总线驱动设备模型之点亮LED
  9. Java学习之Mysql结构优化
  10. Linux - apache 服务