虽然试图从ArcObject的对象实例获取类型名称,但它始终返回_ComObject

问题描述 投票:0回答:1

例如此代码:

var layer = "obtain a layer object from MapControl";
var geoFeaatureLayer = (IGeoFeatureLayer)layer;
var renderer = geoFeatureLayer.Renderer;

渲染器对象类型是基于IRenderer的,这些类型是继承自IRenderer的:SimpleRenderer,ClassBreakRenderer,UniqueValueRenderer等。

当我执行此代码时:

var typeName = renderer.GetType().FullName;

它返回一个字符串:“ System._ComObject”。即使当我使用Microsoft VisiualBasic对象(调用IDispatch的接口)执行此代码时:

var typeName = Microsoft.VisualBasic.Information.TypeName(renderer);

它还返回相同的名称:“ System._ComObject”;

我不知道,您能帮我一些想法来获取真实姓名,例如“ SimpleRenderer”,“ UniqueValueRenderer”,“ ClassBreakRenderer”吗?

c# arcgis
1个回答
0
投票

您可以尝试使用此代码:

Type type = renderer.GetType().GetInterface("IRenderer");
//or
// Type type = typeof(IRenderer);
IEnumerable<string> classNames =  AppDomain.CurrentDomain.GetAssemblies()
        .SelectMany(s => s.GetTypes())
        .Where(p => p.IsClass && p.Name != "Renderer" && type.IsAssignableFrom(p))
        .Select(c => c.Name);

为您提供从IRenderer继承的所有类名称

我希望能帮到您。

© www.soinside.com 2019 - 2024. All rights reserved.