2015-12-04 45 views
0

我已經構建了一個大型應用程序,需要用args重載NEW方法(通常我猜)。使用參數重載新方法

我在一些類中有很多屬性,並且大部分(如果不是全部的話)都會在新方法中重載。我想知道是否有方法從方法中捕獲參數,並通過查看properties/args將值分配給自定義對象。我在類中的所有屬性名稱都與在方法中作爲參數傳遞的屬性名稱匹配,因此匹配「名稱」屬性應該是可能的?

或手動鍵入me.property = arg爲每一個參數較少徵稅的方式...

例如:

public class myClass 
    property arg1 as string 
    property arg2 as string 
    property arg3 as string 

    public sub new(arg1 as string, arg2 as string, arg3 as string) 
     For each arg in methodbase.getcurrentmethod.getParameters 
      custObj(<property name>).value = arg.value where custObj.name = arg.name 
     end for 
    end sub 
end class 

這是無效的VB.net語法只是一個例子什麼我正在努力實現。

回答

1

由於反射無法獲取參數值,因此您的問題沒有真正的解決方案。但是:

你可以通過創建一個匿名類型在 你的方法並利用投影初始器來解決這個問題。你可以用 然後使用反射來詢問匿名類型的屬性。 https://stackoverflow.com/a/1868507/4035472

結果可能是這樣的:

Class [MyClass] 
    Public Property arg1 As String 
    Public Property arg2 As String 
    Public Property arg3 As String 

    Public Sub New(arg1 As String, arg2 As String, arg3 As String) 

    Dim hack = New With { arg1, arg2, arg3} 

    Dim all = BindingFlags.Instance Or BindingFlags.Public Or BindingFlags.NonPublic 
    Dim props = GetType([MyClass]).GetProperties(all).ToDictionary(Function(x) x.Name, Function(x) x) 

    For Each p As PropertyInfo In hack.GetType().GetProperties() 
     props(p.Name).SetValue(Me, p.GetValue(hack)) 
    Next 
    End Sub 
End Class