Как я могу сделать это свойство лучше? - PullRequest
0 голосов
/ 03 февраля 2012

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

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

1 Ответ

1 голос
/ 03 февраля 2012

Вы можете попробовать функцию VB.NET CallByName .

Если это не сработает , попробуйте несколько простых размышлений. Вот ссылка на простой учебник по отражению . Это в 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)», вероятно, будет работать при необходимости.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...