2012-02-03 3 views
0

Okey, вот моя проблема, я называю кучу разных свойств с именем K0-K6, im используя строку, чтобы проверить, какой из них мне нужен, это чертовски беспорядочно, как я могу сделать это более чистым способом? Я убежден, что струны - это не путь, поэтому, пожалуйста, дайте мне комментарий, чтобы попасть в правильном направлении.Как я могу сделать это propertycall лучше?

Dim tempAntDec As Integer 

Select Case wd.MClass 
        Case "K0" 
         tempAntDec = wd.allMeasUnc.K0.antDec 
        Case "K1" 
         tempAntDec = wd.allMeasUnc.K1.antDec 
        Case "K2" 
         tempAntDec = wd.allMeasUnc.K2.antDec 
        Case "K3" 
         tempAntDec = wd.allMeasUnc.K3.antDec 
        Case "K4" 
         tempAntDec = wd.allMeasUnc.K4.antDec 
        Case "K4-5" 
         tempAntDec = wd.allMeasUnc.K4_5.antDec 
        Case "K5" 
         tempAntDec = wd.allMeasUnc.K5.antDec 
        Case "K5-6" 
         tempAntDec = wd.allMeasUnc.K5_6.antDec 
        Case "K6" 
         tempAntDec = wd.allMeasUnc.K6.antDec 
       End Select 

Я хотел бы назвать это каким-либо другим способом, как это .. или не знаю, но я чувствую, что есть лучший способ справиться с этим?

tempAntDec = wd.allMeasUnc.KValue.antDec 
+0

Вы можете заменить строку Enum. – JeffO

ответ

1

Вы можете попробовать VB.NET CallByName Function.

Если это не работает, попробуйте некоторое простое отражение. Вот ссылка на простой reflection tutorial. Он находится в C#, но его легко конвертировать в VB.NET. Вот непроверенный код делает это с помощью отражения:

' Get the K-object reflectively. 
Dim mytype As Type = wd.allMeasUnc.GetType() 
Dim prop as PropertyInfo = mytype.GetProperty(wd.MClass) ' From the System.Reflection namespace 
Dim Kobject as Object = prop.GetValue(wd.allMeasUnc, Nothing) 

' Get the antDec property of the K-object reflectively. 
mytype = Kobject.GetType() 
prop = mytype.GetProperty("antDec") 
tempAntDec = prop.GetValue(Kobject, Nothing) 

В зависимости от настроек компилятора может потребоваться использовать DirectCast преобразовать последнюю строку в целое число (потому что GetValue возвращает его в качестве простого объекта). Что-то вроде «tempAntDec = DirectCast (prop.GetValue (Kobject, Nothing), Integer)», вероятно, будет работать, если потребуется.

Смежные вопросы