我正在更新遗留应用程序,它正在从另一个项目中读取一个字典(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
为什么编译器没有抓住这个呢?
答案 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,以帮助捕获此类事情:)