簡體   English   中英

當類型是值類型時可以將null傳遞給泛型函數

[英]Can pass null to generic function when type is a value type

目前,我僅限於通過.NET 4.0使用VB.NET,並且在進行LINQ查詢時想使用前置功能,這是我創建的功能:

    <Extension>
    Public Iterator Function Prepend(Of TSource)(source As IEnumerable(Of TSource), item As TSource) As IEnumerable(Of TSource)
        If source Is Nothing Then Throw New ArgumentNullException(NameOf(source))

        Yield item
        For Each sourceItem In source
            Yield sourceItem
        Next
    End Function

但是有趣的是,當您將函數鍵入值類型時,您傳遞空引用,例如Integer:

Dim arr = {1, 2, 3}
Dim arr2 = arr.Prepend(Nothing).ToArray()

這將生成一個包含以下內容的數組:0、1、2、3。當轉換為等效的C#並在.NET Core 2.1項目中使用時,我正確地收到了一個編譯器錯誤,告訴我無法在null和整數之間進行轉換。

有沒有辦法告訴VB.NET,我不希望這種事情發生並在編譯時導致錯誤,還是我需要訴諸運行時類型檢查?

VB中沒有Nothing與C#中的null 更好的等效項是default ,因為它表示其類型的默認值。 正如您所注意到的,引用類型的行為是相同的(默認值是空引用),但是值類型卻有很大不同。

由於這是該語言設計的一部分,因此無法將其關閉。

另請參閱Anthony Green的文章: https : //anthonydgreen.net/2019/02/12/exhausting-list-of-differences-between-vb-net-c/#46

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM