2014-01-22 151 views
1

帶有ArcObjects的VB2010。我有一個問題回顧如何做到這一點。我可以測試一個對象類型,然後做一些事情,如果它是適當的類型。所有其他我想顯示一個不支持的類型的消息。所以,我有:對象類型的文字描述

Dim pRasRenderer As IRasterRenderer 
pRasRenderer = pRasterLayer.Renderer 
If TypeOf pRasRenderer Is IRasterClassifyColorRampRenderer Then 
    'process the layer 
Else 
    Debug.Print "Type not supported: " & pRasRenderer.ToString 
End If 

如果不支持打印語句應閱讀

 "Type not supported: IRasterStretchColorRampRenderer" 

或任何其他類型的我就不過程。但我回來的是

 "Type not supported: System.__ComObject" 

我試過GetType()和TypeName。只是不記得我是否可以做到這一點。

回答

0

使用COM,類型不是IRasterStretchColorRampRenderer,它是某種COM類型(很可能)實現了相當多的幾乎截然不同的接口。鑑於您使用的是.NET,任何時候您嘗試直接訪問對象的「類型」時都會得到__ComObject

例如,實現IRasterStretchColorRampRenderer的對象的實際「類型」很可能是COM CoClass的本地實現。因此,您永遠不會從.NET代碼中獲得「託管」類型的名稱。

不幸的是,這意味着您最好的解決方案可能會報告不支持傳入的類型而不是嘗試報告傳入該方法的實際類型。這可能是這樣的:

Debug.Print "Type not supported: Current layer is not using a Classify Color Ramp Renderer" 
+0

我想我開始看到這一點。此處的定義與您在http://edndoc.esri.com/arcobjects/9.2/ComponentHelp/esriCarto/IRasterRenderer.htm中陳述的不同coclasses一樣。我只是把通用的消息。 – sinDizzy

+0

@sinDizzy是的 - 唯一的選擇是檢查個人類型,這將是非常痛苦的。 –