0

분명히 C#의 전문가는 아닙니다. 나는이 코드를 익명 처리기를 사용하여 단순화하고 싶다. 아니면 확실하지 않은 람다 (lambda)를 사용한다. ValueHasChanged은 dp가 변경 될 때 사용되는 PropertyChangedCallback이므로 새 개체가 업데이트되도록 모니터링되어 변경 및 업데이트가 동일한 코드 인 ProcessNewValue을 사용하여 처리됩니다. 여기서 동정은 두 번째 처리기 ValueHasBeenUpdated을 만들어 동일한 메서드를 호출하는 것입니다. ValueHasBeenUpdated의 정의를 삭제할 수 있습니까? 감사.C#, 종속성 속성의 변경과 업데이트를 모두 처리하는 간단한 코드

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() {...} 

답변

0

수행 한 작업에 문제가 없습니다. "우아하지 않은"것처럼 보일 수도 있지만 읽을 수 있습니다. 가독성은 우아함보다 중요합니다. 다른 해결책이있을 수 있지만 다른 코더가 이해하기가 더 혼란 스럽습니다 (또는 앞으로 6 개월을 이해해야합니다).

당신이 가지고있는 것들을 고수하십시오.

+0

좋아, 이쪽으로 가자. 누군가 다른 연습을했다면 나도 흥미가있을거야. 감사. – 742

관련 문제