2011-07-06 5 views
1

レガシーアプリケーションを更新していて、項目の辞書(Guid、String)の別のプロジェクトからdllを読み込んで使用していました。DictionaryをIListに設定するとVB.Netでコンパイラエラーが発生しません

要件が変更され、ディクショナリを返すメソッドがIListを返すようになりました。

これは奇妙な動作です。インテリセンスはキャストエラーを投げているわけではなく、コンパイラもありません。ディクショナリをIListに設定しようとすると、実行時までエラーは発生しません。

例:コンパイラはこれをキャッチされていない理由として

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

任意のアイデア?

+0

VB.Netは*型の安全性をチェックしないため、私はVBを強く型付けされた言語とは考えませんでした。 VBでは、コンパイルしようとする前にC#が叫んでしまう暗黙的なキャストを多く許可しています。 – IAbstract

+0

@IAbstract:Option ExplicitとOption Strictを使用すると、VBはかなり厳密に型指定されています。 –

+0

@Jon:私はOption Wrongであったと思います;) – IAbstract

答えて

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 

エラー:

error BC30512: Option Strict On disallows implicit conversions from 'System.Collections.Generic.IList(Of Integer)' to 'System.Collections.Generic.Dictionary(Of Integer, String)'.

someDictionary = someList 

私はあなたがこの種のものをキャッチ助けるために、厳格なオプションを有効にするには、プロジェクトを変更するお勧め: )

関連する問題