0

明らかに、私は C# の専門家ではありません。匿名ハンドラー、またはおそらくラムダを使用して、このコードを簡素化したいのですが、わかりません。ValueHasChangedPropertyChangedCallbackdp が変更されたときに使用され、新しいオブジェクトの更新が監視されるようにするため、変更と更新の両方が同じコードを使用して処理されます: ProcessNewValue. ここで残念なのはValueHasBeenUpdated、同じメソッドを呼び出すためだけに 2 番目のハンドラーを作成することです。の定義を削除する可能性はありValueHasBeenUpdatedますか? ありがとう。

private static void ValueHasChanged(
    DependencyObject sender, DependencyPropertyChangedEventArgs args) {

    // get instance
    MyClass1 instance = sender as MyClass1;

    // unregister on old object
    if (args.OldValue != null) (args.OldValue as MyClass2).PropertyChanged -=
        instance.ValueHasBeenUpdated;
    // register for updates on new object
    if (args.NewValue != null) (args.NewValue as MyClass2).PropertyChanged +=
        instance.ValueHasBeenUpdated;

    // process new value anyway
    instance.ProcessNewValue();
}

// value has been updated
private void ValueHasBeenUpdated(object sender, PropertyChangedEventArgs e) {

    // just call the actual method that will process it, not elegant...
    ProcessNewValue();
}

// process any new or updated object
private void ProcessNewValue() {...}
4

1 に答える 1

0

あなたがしたことをすることに何も悪いことはありません。「違法」に見えるかもしれませんが、読みやすくなっています。読みやすさは優雅さよりも重要です。他の解決策があるかもしれませんが、それらはすべて、他のコーダーが理解するのに(またはあなたが今から6か月後に理解するのに)もっと混乱するでしょう。

あなたが持っているものに固執しなさい。

于 2010-07-23T16:39:42.527 に答える