【轉】編寫高質量代碼改善C#程序的157個建議——建議35:使用default為泛型類型變量指定初始值
阿新 • • 發佈:2017-12-01
如果 items item 類型變量 color 高質量 使用 per match
建議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個建議》陸敏技
【轉】編寫高質量代碼改善C#程序的157個建議——建議35:使用default為泛型類型變量指定初始值