2014-12-04 2 views
0

내가 구현하는 몇 가지 측면에서 아래의 코드를 사용 INotifyPropertyChanged :LocationInterceptionAspect.OnSetValue (LocationInterceptionArgs args) : 속성이 인덱서인지 확인하고 값을 가져 오는 방법은 무엇입니까?

[Serializable] 
public class NotifyPropertyChangedAspect : LocationInterceptionAspect { 
    /* ... stuff ... */ 
    public override void OnSetValue(LocationInterceptionArgs args) 
    { 
     var obj = args.Instance; 
     /* ... more stuff ... */ 
     var oldValue = args.Binding.GetValue(ref obj, Arguments.Empty); 
     /* ... extra stuff ... */ 
    } 
} 

하지만 내 속성은 인덱서 인 경우, 다음은 예외 InvalidCastException와 함께 실패

Unable to cast object of type 'PostSharp.Aspects.Internals.Arguments`1[PostSharp.Aspects.Arguments]' to type 'PostSharp.Aspects.Internals.Arguments`1[System.Int32]'.

는 어떻게 확인합니까 속성이 인덱서이고 해당 값을 얻는다면 (컴파일하는 동안 검사를 수행하고 싶습니다. CompileTimeInitialize 메서드 내에서)?

답변

0

LocationInterceptionArgs.Index 속성 값을 Binding.GetValue 메서드에 전달할 수 있습니다. 속성에 올바른 인수 값이 이미 있습니다.

var oldValue = args.Binding.GetValue(ref obj, args.Index) 

또 다른 옵션은 args.GetCurrentValue()입니다.

-alex