2012-02-03 1 views
0

Okey, 여기 내 문제입니다. K0에서 K6로 이름이 바뀐 다른 propertys를 호출합니다. 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

문자열을 열거 형으로 바꿀 수 있습니다. – 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) 

컴파일러 설정에 따라 당신이 (GetValue는 일반 객체로 반환하기 때문에) 정수에 마지막 줄을 변환 할 DirectCast을 사용해야 할 수도 있습니다 : 여기 반사를 사용하여 작업을 수행하는 테스트되지 않은 코드입니다. "tempAntDec = DirectCast (prop.GetValue (Kobject, Nothing), Integer)"와 같은 것이 필요할 경우 아마 작동 할 것입니다.

관련 문제