我以爲T?
只是Nullable<T>
的編譯速記。根據MSDN:爲什麼不可能在可空行情下調用靜態方法?
語法
T?
是Nullable<T>
,其中T
是值類型的簡寫。 這兩種形式是可以互換的。
但是,有一點(不顯着)的區別:Visual Studio中不允許我打電話給在速記靜態方法:
bool b1 = Nullable<int>.Equals(1, 2); //no error
bool b2 = int?.Equals(1, 2); //syntax error "Invalid expression term 'int'"
爲什麼?這種限制是否有任何理由?
這是一個語法的東西。解析器找不到'?.' – jwg
這是一個很好的問題,雖然我不知道那會是什麼意思,我們會用Nullable .Equals(1,2)來測試什麼? (我不是故意的,是一個真正的問題) –
hardkoded
從C#6開始,'?。'用作空條件檢查,因此它是語法錯誤。當使用早期版本不能識別單個運算符時,情況可能會有所不同。 –