2016-04-14 27 views
1

Özel üyelere değer ayarlamadan önce bazı doğrulama gerçekleştirmek için özellik ayarlayıcısını postsharp LocationInterceptionAspect kullanarak engellemeye çalışıyorum. Değer veri türü özellik veri türü ile uyumlu değilse, InvalidCastException atar ve OnSetValue çağırmaz, ancak iyi çalışır. Bu istisnayı genel olarak yakalayabileceğim, değeri geçersiz kılacak ve daha sonra setter ile işleyebileceğim bir yol var mı?Yakalamak için özellik atama InvalidCastException

İşletme Doğrulayıcı Unsur:

<Serializable()> 
Public Class PropertyValidatorAttribute 
    Inherits LocationInterceptionAspect 

    Public Overrides Sub OnSetValue(args As LocationInterceptionArgs) 
     'Perform validation here 

     args.ProceedSetValue() 
    End Sub 
End Class 

Sınıf yönü kullanılır:

Public Enum MyEnum 
    A = 1 
    B = 2 
End Enum 

Public Class SampleClass 
    <PropertyValidator()> 
    Public Property SomeProperty As MyEnum 
End Class 

Main:

Sub Main() 
    Dim x As New SampleClass() 
    x.SomeProperty = "X" 
End Sub 

cevap

0

Ben vb.net yaklaşık% 100 emin değilim ama gerçekten happinging bu

x.SetSomeProperty((MyEnum)"X") 

Bu sadece düz .NET olduğu için çevrilmiştir olmasıdır. bu postharps sonra yönteminizi zorlamak için deneyin ama kendisi cast ve SetSomeProperty arasına ekleyecektir. (bunu ilspy ile doğrulayabilirsiniz). Bu, oyuncuyu yakalayamayacağınız anlamına gelir. VisualBasic derleyici

Dim temp = CType("X", MyEnum) 
x.SomeProperty = temp 

ınvalidcastexception Batavia işaret ettiği gibi SomeProperty ait alıcı çağrılır önce bile CType ifadesi tarafından atılan üretir OptionStrict off ve bunun yerine

x.SomeProperty = "X" 

ait

0

Projeniz kullanır.

OptionStrict on (komut satırında/optionstrict +) değerini ayarlarsanız, bir derleme hatası alırsınız.