将Dictionary设置为IList时,VB.Net不会抛出编译器错误

时间:2011-07-06 20:10:18

标签: .net vb.net compiler-errors

我正在更新遗留应用程序,它正在从另一个项目中读取一个字典(Guid,String)项目并使用它们的dll。

要求已更改,返回Dictionary的方法现在返回IList。

这是奇怪的行为; intellisense不会抛出强制转换错误,编译器也不会抛出错误。在尝试将Dictionary设置为IList时,它不会在运行时抛出错误。

示例:

        Dim someDictionary As Dictionary(Of Integer, String) = New Dictionary(Of Integer, String)
        Dim someList As IList(Of Integer)
        someDictionary = someList

为什么编译器没有抓住这个呢?

1 个答案:

答案 0 :(得分:3)

Option Strict”开启时出现错误:

Option Strict On

Imports System.Collections.Generic

Public Class Test
    Public Shared Sub Main()
        Dim someDictionary As Dictionary(Of Integer, String) = _
               New Dictionary(Of Integer, String)
        Dim someList As IList(Of Integer) = Nothing
        someDictionary = someList
    End Sub
End Class

错误:

  

错误BC30512:Option Strict On禁止从'System.Collections.Generic.IList(Of Integer)'到'System.Collections.Generic.Dictionary(Of Integer,String)'的隐式转换。

   someDictionary = someList

我建议您更改项目以启用Option Strict,以帮助捕获此类事情:)