2

既存のフレームワークを使用する場合、通常は元の開発者によって追加された拡張ポイントであるアクションを実行しないアクションデリゲートを渡す必要がある場合があります。例:

var anObject = new Foo(() => { });

そしておそらく、Fooオブジェクトはいつかこのデリゲートを呼び出すでしょう。ここでの私の目標は、{}の使用を排除することです。これは、私のスタイルでは{}を単独で、行を分離する必要があることを示しているためです。私は少しOCDであり、必要がない場合は冗長になるのが嫌いです。

値を返すアクションを処理する場合、これは十分に単純です。ステートメントの代わりに式を指定できます(したがって、中括弧は削除されます)。例:

var anObject = new Foo(() => string.Empty);

だから、質問は2つの部分だと思います...

.NETには、デフォルトの空のアクションがありますか?{}以外に、ラムダに空の式を提供するためのシンタックスシュガーはありますか?

私が傾倒している現在の解決策は、関数呼び出し内でラムダ式を使用する必要がないように、前の割り当てでデリゲートを定義することです。

4

1 に答える 1

2

私が知っている組み込みのものは何もありません。

デリゲートをヘルパーシングルトンとして一度定義するだけで済みます。

var anObject = new Foo(NoOpAction.Instance);

// ...

var anotherObject = new Bar(NoOpAction.Instance);

// ...

public static class NoOpAction
{
    private static readonly Action _instance = () => {};

    public static Action Instance
    {
        get { return _instance; }
    }
}

NoOpAction.Instanceまた、プログラム全体で使用するたびにまったく同じデリゲートが渡されるため、すべて同じことを行う複数のデリゲートを作成してガベージコレクションするための(確かに小さい)コストも節約できます。

于 2013-03-26T10:58:08.683 に答える