1

かなり長い間これを解決しようとしましたが、運が悪かった...私の考えは、たとえば..例外の処理方法を制御するなど、さまざまな設定に何らかの構成を持たせることでした。

私のコードの一部:)

public class ErrorEventArgs : EventArgs
{
   public bool Handled { get; set; }
...
...
}

次のような私のメインクラスのプロパティ:

EventHandler<ErrorEventArgs> ErrorConfiguration {get; set;}

次に、Handled の値を知る必要がある OnError があります。

internal void OnError(ErrorEventArgs args)
{
   Func<EventHandler<ErrorEventArgs>, bool> IsHandled;

   IsHandled = ev => ??? // invoke ErrorConfiguration?

   if (ErrorConfiguration != null && IsHandled(ErrorConfiguration ))
                error(this, args);
}

これはどのように解決できますか?

Func のない EventHandler の場合は、このようにすることができますが、ブール式をカプセル化したいと考えています。ラムダをチェーンできないのはなぜですか... :(

EventHandler<ErrorEventArgs> IsHandled;
IsHandled = (sender, e) => e.ErrorContext.Handled;

実際のファイル名を使用する必要があります。つまり、includeorrequireステートメント内のファイル名は、実際のファイル名と一致する必要があります。

4

2 に答える 2

2

正確には、あなたが何を達成したいのか完全にはわかりません。しかし、あなたは次のようなことをすることができます:

IsHandled = ev => { ev(this, args); return args.Handled; };

これがより読みやすく、より速く、よりクリーンであるかどうかはわかりませんが、そのようなものです。私はただのようなもので行きます

if (ErrorConfiguration != null) ErrorConfiguration(this, args);
if (!args.Handled) error(this, args);
于 2011-03-19T13:31:11.297 に答える
1

デリゲートを直接呼び出す必要があるだけで、呼び出すのにラムダは本当に必要ありません。

internal void OnError(ErrorEventArgs args)
{
   if (ErrorConfiguration != null)
       ErrorConfiguration(this, args);

   if (args.Handled)
       error(this, args);
}

ラムダで同じことを使用したい場合は、これを行う必要があります。これには、より多くのコード行が必要になります。

internal void OnError(ErrorEventArgs args) {   
Func<EventHandler<ErrorEventArgs>, bool> IsHandled;

   IsHandled = ev => {
        ErrorConfiguration(this, ev);
        return ev.Handled;   
   };

   if (ErrorConfiguration != null && IsHandled(ErrorConfiguration ))
       error(this, args); 
}
于 2011-03-19T13:31:40.333 に答える