2014-01-22 104 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是的 - 唯一的选择是检查个人类型,这将是非常痛苦的。 –