2015-09-08 137 views
0

VB2010。甚至不知道這是否可能,但爲了調試的目的,我想打印出分配給主變量(都是類)的變量的名稱。在.NET中分配的變量名稱

 Dim mstTripClass As Trip = Nothing 
     Select Case sc 
      Case "0" 
       mstTripClass = driver.BusinessTrip 
      Case "7", "8" 
       mstTripClass = driver.LeisureTrip 
      Case "10" 
       mstTripClass = driver.OtherTrip 
      Case Else 
       Throw New Exception("Invalid trip class") 
     End Select 

     Debug.Print("Trip class=" & mstTripClass.GetType.ToString) 

此打印出

 Trip class=MyCompany.MyDept.MyApp.Trip 

什麼,我想打印出來是一樣的東西:

 Trip class=BusinessTrip 

我什至不知道如何尋找這種類型的事情。我尋找反思,但空虛。

+1

只是打印出sc,數字會告訴你來源。或者在每種情況下添加一個調試打印。它還取決於每個變量的類型,是BusinessTrip Trip的一個實例嗎?您旅行類可以有TripType,表明它是否是商務/休閒/其他 –

+0

是的所有BizTrip,LeusureTrip,OtherTrip都是旅行類型。這就是爲什麼我可以將它們分配給Trip類型的主變量。由於變量已經表明它是什麼類型,我希望有一種方法可以做到這一點,而無需添加其他字段。 – sinDizzy

+0

除非您將該信息保存在某處,否則無法確定變量的來源。你可以做的是在Trip類中添加一個屬性,指明它是什麼類型的旅程。這是非常有意義的,因爲這是應該成爲Trip類的一部分的邏輯。然後,您只需執行Debug.Print(「Trip class =」&mstTripClass.TypeOfTrip) –

回答

1

這裏根本不需要反射。兩個簡單的替代品浮現在腦海中:

  1. 打開driver到具有價值BusinessTripLeisureTrip

  2. 無論何種類型driver.BusinessTrip有,延長該類型與抽象的字符串屬性TypeDescription並有BusinessTripEnumLeisureTrip等子類型覆蓋該屬性,以便它們返回文本說明。

+4

另一種選擇:覆蓋'Trip'中的'ToString' –

+0

驅動程序類是一個更大的類,其中定義了三種類型的行程,因此無法將其變爲emum。如上所述,我可以添加另一個字段,但由於變量名稱已經表示什麼類型的行程,我希望我可以做到這一點,而無需添加另一個字段。不知道我怎麼可以重寫ToString給我的變量名稱。這基本上是我想要做的,但我使用了什麼功能? – sinDizzy