我有一個interface<T>. 這個介面有一個方法Compare(T x, T y)。
x永遠不可能null。y很有可能是null。
我想通過?在y:上使用 Null 條件運算子來明確這一點Compare(T x, T? y)。
這可能嗎?來自哪個版本的 C#?
編輯:
T 可以是參考型別和值型別。
uj5u.com熱心網友回復:
我在@PanagiotisKanavos 建議的檔案中找到了答案:
https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references#generics
在 C# 8.0 中,使用T?不限制T為 astruct或 aclass未編譯。這使編譯器能夠T?清楚地解釋。通過為不受約束的型別引數定義以下規則,該限制在 C# 9.0 中被移除T:
如果 for 的型別引數
T是參考型別,則T?參考相應的可為空的參考型別。例如,如果T是 astring,則T?是 astring?。如果 for 的型別引數
T是值型別,則T?參考相同的值型別T。例如,如果T是int,T?則也是int。如果 for 的型別引數
T是可為空參考型別,則T?參考相同的可為空參考型別。例如,如果T是 astring?,則T?也是 astring?。如果 for 的型別引數
T是可空值型別,則T?參考相同的可空值型別。例如,如果T是 aint?,則T?也是 aint?。
對于我的問題,這意味著我需要限制T為一個類,因為我使用的是 C#8。
uj5u.com熱心網友回復:
鑒于直到這個答案是寫,它沒有提到,如果有一個條件T是這樣
public interface IDoWork<T> : where T: ???
{...}
我們假設它是一個參考型別
現在假設它T是一個參考型別,那么你應該這樣做
public int Compare(T x, T y)
{
if (y == null)
//Take decision accordingly.
else
//Take decision accordingly.
}
比較方法不將引數作為可空型別。他們采用純實體,然后在方法內部根據預期的行為做出決定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/359806.html
上一篇:如何避免可空參考型別的空引數
