web-dev-qa-db-ja.com

Option Strict Onは、遅延バインディングを許可しません

誰かがこのエラーを修正するのを手伝ってもらえますか?

Option Strict Onは、遅延バインディングを許可しません

エラーの原因となっているコードは次のとおりです。

Dim SF6StdData As BindingSource = New BindingSource() 
' ...
If StrComp(SF6StdData.Current("O2AreaCts").ToString, "") = 0 Then
    AreaCts(3) = 0
Else
    AreaCts(3) = Convert.ToDouble(SF6StdData.Current("O2AreaCts").ToString)
End If

エラーが発生しないようにコードを書き直す必要があります。プロジェクトのプロパティでOptionStrictをOffに設定することでこれを修正できることはわかっていますが、実際には修正したくありません。他に方法はありますか?

11
mike

Option Strictがオンの場合、遅延バインディングは許可されません。遅延バインディングを実行する必要がある場合、唯一のオプションは、リフレクションを使用するか、Option Strictをシャットオフすることです。ただし、1つの節約の恩恵は、プロジェクト全体でOption Strictを停止する必要がないことです。プロジェクト用にオンのままにして、遅延バインディングを実行する必要があるコードファイルの先頭にOption Strict Off行を追加するだけです。これは優れたソリューションではありませんが、プロジェクト全体に影響を与えるよりはましです。

また、ファイルの先頭に配置されたOption Strictはそのファイルにのみ適用されるため、クラス全体に適用する必要はありません。クラスを複数のPartial Classファイルに分割する場合は、それらのファイルごとにOption Strictを異なる方法で設定できます。たとえば、クラスの大部分をOptions Strict Onのファイルに入れ、次に1つのメソッドをPartial Classの別のファイルのOption Strict Offに入れると、その1つのメソッドだけが大まかにコンパイルされます。クラスの残りの部分は、厳密なルールを使用してコンパイルされます。

12
Steven Doggart

BindingSourceを厳密に型指定されたデータソースとして機能させる必要があります。ドキュメントの注釈を参照してください: http://msdn.Microsoft.com/en-us/library/system.windows.forms.bindingsource.aspx

3
Andrew Morton

型なしでAreaCtsを宣言した場合、例:

Dim AreaCts as Array

試してみてください

Dim AreaCts() as Double

これにより、遅延バインディングエラーが修正されました。

1
kadzema