I'm trying to retrieve all subtypes for a given feature class. ISubtypes.Subtypes give you an enumeration of all subtypes in the class. However the IEnumSubtype.Next method requires the subtype code to retrieve the associated subtype. But this obviously requires prior knowledge of all subtype codes. There are no methods on ISubtypes that retrieve all subtype codes. So, how do I obtain a list of both the subtype codes and subtype names associated with a feature class? I must be missing something obvious here.
I found a way to retrieve both the subtype codes and subtype names for a feature class using the Geoprocessor. I did not find a way to get the codes directly from ISubtypes, which I find unusual. In any case, the following code will create a Dictionary(Of Integer, String) containing the subtype code as the key and the subtype name as the value:
Dim gp as New Geoprocessor Dim dtype As Object = "" Dim dataElem As IDataElement = gp.GetDataElement("C:\Test.gdb\TestFC", dtype) Dim deTbl As IDEGdbTable = TryCast(dataElem, IDEGdbTable) Dim dictSubtypes as New Dictionary(Of Integer, String) Dim arr as IArray = deTbl.Subtypes For i As Integer = 0 To arr.Count - 1 Dim gpSt as IGPSubtype = CType(arr.Element(i), IGPSubtype) dictSubtypes.Add(gpSt.SubtypeCode, gpSt.SubtypeName) Next