zoukankan      html  css  js  c++  java
  • 编写高质量代码改善C#程序的157个建议——建议35:使用default为泛型类型变量指定初始值

    建议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个建议》陆敏技

  • 相关阅读:
    android 如何添加第3方lib库到kernel中
    如何搭建modem编译环境
    /dev、/sys/dev 和/sys/devices 和udev的关系
    Makefile的obj-y 和 obj-m
    MTK Android添加驱动模块
    使用 /sys 文件系统访问 Linux 内核
    JNI设置C++与java的结合(2)
    android 常用方法集合
    操作系统(科普章节)
    前端面试之前要准备的那些事
  • 原文地址:https://www.cnblogs.com/jesselzj/p/4732547.html
Copyright © 2011-2022 走看看