编写高质量代码改善C#程序的157个建议——建议35:使用default为泛型类型变量指定初始值
2024-10-20 03:14:22
建议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个建议》陆敏技
最新文章
- asp.net gridview 鼠标悬浮提示信息
- Python自动化之sqlalchemy复合外键
- 轻松学习RSA加密算法原理
- javaweb学习总结二十五(response对象的用法一)
- Tomcat就是个容器,一种软件
- (转)SSI开发环境搭建
- WCf的理解
- css权威指南(上)
- 关于typedef的用法总结
- HDU 5523 Game
- 添加网站QQ客服链接
- Web Api HttpWebRequest 请求 Api 及 异常处理
- Java集合之Stack
- placeholde属性在IE10以下浏览器上的兼容方案
- javascript设计模式阅读后的感悟与总结
- 不能靠眼睛之 KEIL 中失效代码灰暗特性
- Tomcat8源码笔记(四)Server和Service初始化
- C++ code:位操作实例(bit operation example)
- 深度学习Bible学习笔记:第一章 前言
- POJ 2752 Seek the Name, Seek the Fame(KMP中next的理解)题解
热门文章
- linux系统无法挂载U盘
- classpath和环境变量设置
- java图形用户界面边界布局管理器
- 多线程设计模式(二):Future模式
- Spring启动后获取所有拥有特定注解的Bean,注解的属性值
- oracle 11g r2 rac +openfiler 2.99 +centos 6.5+vbox
- 使用QuartZ.net来做定时计划任务 ; 值不能为 null。 参数名: assemblyString
- linux平台总线驱动设备模型之点亮LED
- Java学习之Mysql结构优化
- Linux - apache 服务