1

ここにある簡単なコードを試してみたいと思います。

http://msdn.microsoft.com/en-au/library/ff664617%28v=pandp.50%29.aspx

しかし、コンパイルできません。何か間違ったことをしているに違いありません。ページの約 3 分の 1 を下ると、次のようなコード サンプルが表示されます。

'使い方 exManager.Process(Function() メソッド名(param1, param2), _ "例外ポリシー名")

しかし、次のコードを入力すると:

Dim exManager As ExceptionManager
exManager = EnterpriseLibraryContainer.Current.GetInstance(Of ExceptionManager)()
exManager.Process(Function() TestSub(), "Exception Policy Name")

3 行目に次のようなエラーが表示されます。

アクセス可能な 'Process' をこれらの引数で呼び出すことができないため、オーバーロードの解決に失敗しました: 'Public Overridable Function Process(Of TResult)(action As System.Func(Of TResult), policyName As String) As TResult': インスタンス メンバーを参照できませんクラスの明示的なインスタンスなしで、共有メソッドまたは共有メンバー初期化子内からのクラスの。

'Public Overridable Function Process(Of TResult)(action As System.Func(Of TResult), policyName As String) As TResult': 型パラメーターのデータ型は、これらの引数から推測できません。データ型を明示的に指定すると、このエラーが修正される場合があります。

次のようにラムダを変更しようとしても:

exManager.Process(Function() Dim A As Integer=6, "Exception Policy Name")

同様のエラーが発生します。

コメントをいただければ幸いです。

アップデート:

注: .NET Framework 4 Client Profile 用にコンパイルしています

4

1 に答える 1

1

Process(Of TResult)を呼び出すときにオーバーロードを使用していますexManager.Process(Function() TestSub(), "Exception Policy Name")

このメソッドはジェネリックであり、型引数 ( TResult) を必要とします。これは、多くの場合、コンパイラによって推論できます。例外は、あなたの場合、コンパイラーが を推論できることを示していますTResult

あなたTestSubは本当に でSubあり、コンパイラが推測するために使用できる戻り値がないと思いますTResult


したがって、代わりに次のいずれかを使用して、非一般的なProcess方法を使用しますSubFunction

exManager.Process(Sub() TestSub(), "Exception Policy Name")

または単に使用AddressOf

exManager.Process(AddressOf TestSub, "Exception Policy Name")
于 2013-02-25T08:50:43.910 に答える