2015-02-11 149 views
0

我有一些ressourcefile定義了一些錯誤代碼。 我只想在我的項目中使用強類型。 我還必須實現一些異常處理,該處理將打印ressourcefile中定義的錯誤,並且還會顯示ressourceproperty的名稱。 認爲它是這樣的: 屬性名稱是ERROR1(類型字符串) 屬性值是「這是錯誤」.net和屬性屬性

現在,我想有一些的Funktion打印出: ERROR1:這是錯誤

是否有可能獲得信息的Property-Info,而不將屬性名稱作爲字符串傳入?這樣我可以使用屬性的名稱和值來輸出這兩個數據。

喜歡的東西:

Public Class Form1 
     Public Class PropTestClass 
      Public Shared ReadOnly Property Prop1 As String 
       Get 
        Return "Test1" 
       End Get 
      End Property 

      Public Shared ReadOnly Property Prop2 As String 
       Get 
        Return "Test2" 
       End Get 
      End Property 
     End Class 


     Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
      TestPrint(PropTestClass.Prop1) 
     End Sub 

     Public Sub TestPrint(prop As Object) 
      Debug.Print(prop) '--> need to output: "Prop1: Test1" 
     End Sub 
    End Class 

可以使用反射,推廣。

任何提示?

回答

0

使用LINQ表達式

'declare all ressources in Meldungen 

'part of class SmartException::Exception 
Private m_Message As String 
Public Overrides ReadOnly Property Message As String 
    Get 
     Return m_Message 
    End Get 
End Property 

Public Function SetResMessage(Of TProp)(expression As Expressions.Expression(Of Func(Of Meldungen, TProp)), ParamArray params As Object()) As MySmartException 
    Dim body As MemberExpression = TryCast(expression.Body, MemberExpression) 
    If body Is Nothing Then 
     Throw New ArgumentException("'expression' should be a member expression") 
    End If 

    RessourceString = GetType(Meldungen).GetProperty(body.Member.Name).GetValue(Nothing, Nothing).ToString 
    RessourceID = body.Member.Name 
    m_Message = Useful.StringFormat(RessourceID & " : " & RessourceString, params) 

    Return Me 
End Function 

'then use it like this 
Throw New SmartException().SetResMessage(Function(f) Meldungen.ID_1084, "testval") 

得到這個工作,如果有人需要它:)