[英]Is there a way to Imitate C# 6 Null-Conditional operator in C# 5
[英]C# Is there a way to put a Null-conditional operator (?) on T?
我有一個interface<T>
。 這個接口有一個方法Compare(T x, T y)
。
x
永遠不能是null
。y
很有可能是null
。 我想通過使用 Null 條件運算符來明確這一點?
在y
上: Compare(T x, T? y)
。
這可能嗎?來自 C# 的哪個版本?
編輯:
T
可以是引用類型和值類型。
我在@PanagiotisKanavos 建議的文檔中找到了答案:
https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references#generics
在 C# 8.0 中,使用T?
沒有將T
限制為struct
或class
沒有編譯。 這使編譯器能夠解釋T?
清楚地。 在 C# 9.0 中,通過為不受約束的類型參數T
定義以下規則,刪除了該限制:
如果T
的類型參數是引用類型, T?
引用相應的可為空的引用類型。 例如,如果T
是一個string
,那么T?
是一個string?
.
如果T
的類型參數是值類型, T?
引用相同的值類型T
。 例如,如果T
是int
,則T?
也是一個int
。
如果T
的類型參數是可為空的引用類型,則T?
引用相同的可為空引用類型。 例如,如果T
是一個string?
,那么T?
也是一個string?
.
如果T
的類型參數是可空值類型, T?
引用相同的可為空值類型。 例如,如果T
是int?
,那么T?
也是一個int?
.
對於我的問題,這意味着我需要將T
限制為 class,因為我使用的是 C#8。
鑒於在寫完這個答案之前,沒有提到如果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.
}
比較方法不將參數作為可空類型。 它們采用純實例,然后在方法內部根據預期的行為做出決定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.