在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
建议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 = 0; 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 = 0; i < this._size; i++) { if (match(this._items[i])) { return this._items[i]; } } return default(T); }
转自:《编写高质量代码改善C#程序的157个建议》陆敏技 |
请发表评论