2015-11-05 89 views
0

假設我有幾個類,如class1class2。這些類可以有很多屬性,甚至可以從執行變爲另一個(取決於軟件的版本)。用一個字符串中的值替換變量名稱

用戶可以用純文本定義「公式」,軟件應該將「變量」(類+屬性)的名稱與其實際值進行轉換。因此,給定class1的實例和class2的實例,我應該循環屬性(和變量)並檢查公式是否包含它們。對於每一個我應該用值替換名稱。

例如,我可以有:

Dim myClass1 As Class1 = New Class1() 
myClass1.PropertyA = "FOO" 
myClass1.PropertyB = 5 

Dim myClass2 As Class2 = New Class2() 
myClass2.PropertyX = "BAR" 
myClass2.PropertyY = 7 

而且用戶可以宣佈這個公式(此公式中VB.NET被簡化,但實際上它可以在SQL或不同類型的公式。是純文本,所以是在代碼的字符串):

Dim i = 0 
While (i + myClass1.PropertyB) < myClass2.PropertyY 
    str = "myClass1.PropertyA" & "myClass2.PropertyX" 
    i += 1 
End While 

的結果,替換後,應該是:

Dim i = 0 
While (i + 5) < 7 
    str = "FOO" & "BAR" 
    i += 1 
End While 

現在,類和變量可能會有所不同,所以我無法搜索特定的字符串。我認爲我應該使用反思,但我不習慣它,如果存在更好的解決方案,我寧願避免它。任何建議和/或最佳做法?

回答

0

這可以作爲一個類或函數來完成 考慮公式。 X =(一個A)+(B B)+(2 * A * B)

Public Function formularesult(Byval a1 as double,Byval b1 as double) as double 
Dim x as double 
x=0 
Dim a as double 
a=0 
Dim b as double 
b=0 
a =a1 
b=b1 
x=(a*a)+(b*b)+(2*a*b) 
return x 
End Function 

調用該函數可以BS遵循的 令值和b可以是12和20分別。

Dim result as double 
result =formularesult(12,20) 

我希望這可以幫助某人。

總是歡迎對我的建議有所改進。