where T : struct
約束允許將可接受類型參數的域限制爲值類型集(與包括值和引用類型的類型的超集相比),但似乎也完全禁止可空類型,儘管可爲空必然意味着現代版本的C#中的引用類型。如何限制泛型類型參數只接受C#中的空值類型?
如果我想要接受像int?
,DateTime?
等增加可空性的值類型,同時拒絕像字符串,IList等本地可空的引用類型,該怎麼辦?這樣可以定義約束嗎?如果是這樣?
我真的很好奇學習如何實現這兩種情況:當用作參數的類型必須是值和可爲空,並且可以接受可爲null的值類型以及不可爲空值類型時,以及我認爲這些相關性足夠緊密,所以不妨提及兩者,所以我會欣賞關於第二種情況的謙遜評論,並選擇一個包括它作爲更好的答案的答案(假如另一個答案在其他方面不會更好),如果超過一個答案將被提交,我將不得不選擇,但我現在實際需要的是第一個案例(總是需要一個既可爲空也是一個值類型的類型),我也相信第二個考慮到第一種情況,情況會非常簡單,更不用說堅持把兩個問題粘合成一個問題是不好的,所以我會將abs對於只處理第一種情況的人,我也會表示理解並接受答案。
你試過使用System.Nullable作爲約束嗎? https://msdn.microsoft.com/en-us/library/b3h38hb0.aspx –
linuxuser27
對C#的不幸通用約束是有限的,沒有人可以提供一個不存在的功能的答案,甚至不是Eric Lippert :) –
@SelmanGençD'oh!那就對了。我一直忘記那個限制。我沒有VS在我面前,所以我可以測試:) – linuxuser27