今天偶然在看別人程式碼時,發現在他的程式碼裡使用了Any判斷List<T>是否為空。
我一般的做法是先判斷是否為null,再判斷Count。
看了一下Count的原始碼如下:
1 [__DynamicallyInvokable] 2 public int Count 3 { 4 [__DynamicallyInvokable] 5 get 6 { 7 return _size; 8 } 9 }
Any()的原始碼如下:
1 [__DynamicallyInvokable] 2 public static bool Any<TSource>(this IEnumerable<TSource> source) 3 { 4 if (source == null) 5 { 6 throw Error.ArgumentNull("source"); 7 } 8 9 using (IEnumerator<TSource> enumerator = source.GetEnumerator()) 10 { 11 if (enumerator.MoveNext()) 12 { 13 return true; 14 } 15 } 16 17 return false; 18 }
測試了一下,大量資料情況下,耗時幾乎都是0ms,所以應該差別不大。
有時候如果我們想在Visual Studio中單步除錯.NET的原始碼,可以按下面的方式操作
1、除錯-》選項-》常規-》取消“僅我的程式碼”
2、除錯-》選項-》符號-》鉤選Microsoft符號伺服器
此時再除錯時,就能單步除錯.NET原始碼。
除錯效果:
如果提示找不到某個符號,可以下載 https://github.com/dotnet/runtime.git (僅.NET Core)倉庫裡的原始碼,找到對應的檔案