例如此代码:
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”吗?
您可以尝试使用此代码:
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继承的所有类名称
我希望能帮到您。