2012-01-19 1 views
1

BasicTypes.xsd из схемы GML включает в себя следующее:словарь как Enum

<simpleType name="SignType"> 
    <annotation> 
     <documentation> 
     gml:SignType is a convenience type with values "+" (plus) and "-" (minus). 
     </documentation> 
    </annotation> 
    <restriction base="string"> 
     <enumeration value="-"/> 
     <enumeration value="+"/> 
    </restriction> 
</simpleType> 

кода генератора (Sparx предприятие архитектора) создающего следующее:

namespace OGC.GML.BasicTypes { 
    /// <summary> 
    /// gml:SignType is a convenience type with values "+" (plus) and "-" (minus). 
    /// </summary> 
    public enum SignType : int { 
     -, 
     + 
    } 
} 

Ofcourse, я не могу имеют - и + в качестве ключей перечисления. Так что я задал себе вопрос:

Как бы определить объект Dicionary для удовлетворения схемы, какой она есть? Или есть лучший способ? Просьба привести пример кода.

Похоже, these people are using an array.

ответ

1

Вот пример использования словаря. То, что в основном использует словарь, это сопоставление одного объекта с другим, в этом случае строка с int, вы всегда можете использовать разные типы для ключей и значений, если хотите.

 Dictionary<string, int> SignType = new Dictionary<string, int>(); 
     SignType.Add("-", 0); 
     SignType.Add("+", 1); 

     int plusValue = SignType["+"]; 

EDIT: Я обновил его снова

Теперь вы можете использовать статический класс как так

namespace OGC.GML.BasicTypes 
{ 
    public static class SignType 
    { 
     public static Dictionary<string, int> Values = new Dictionary<string, int>(); 
     static SignType() 
     { 
      Values.Add("-", 0); 
      Values.Add("+", 1); 
     } 
    } 
} 

и вы должны ввести OGC.GML.BasicTypes.SignType.Values["+"]

Или ты может использовать класс экземпляра

public class SignType 
    { 
     private static Dictionary<string, int> Values = new Dictionary<string, int>(); 
     public SignType() 
     { 
      Values.Add("-", 0); 
      Values.Add("+", 1); 
     } 
     public int this[string s] 
     { 
      get { return Values[s]; } 
     } 
    } 
} 

, который позволит `нового OGC.GML.BasicTypes.SignType() [«+»]»

и даже если BasicTypes класса вместо имен, это еще можно положить больше перечислений и подклассы внутри из этого, но это может быть не идеальное решение, в зависимости от цели пространства имен.

+0

Спасибо, но я знаю, как работает словарь. Мне нужно знать, как определить его так, чтобы он соответствовал требованиям схемы. Как вы это делаете, как это работает с пространством имен? я смогу пойти 'OGC.GML.BasicTypes.SignType [" + "]'? – capdragon

+0

Я обновил сообщение, которое включает в себя код, который будет включать 'OGC.GML.BasicTypes.SignType [" + "]' –

+0

На самом деле, я не уверен, что мне нужно, но он должен быть прав со схемой. Теперь, когда вы показываете пример, я знаю, что это не сработает, потому что в пространстве имен OGC.GML.BasicTypes есть много кланов и типов, которые необходимо создать. Поэтому он не может быть статическим классом. Я прошу прощения за то, что вы отложили свое время, но если бы я знал, что я искал, я бы сделал это к настоящему времени. Я думаю, мне нужно, чтобы кто-то сказал мне, как определить его так, чтобы он соответствовал требованиям схемы. :/... но вы правы, ваш код редактирования создаст 'OGC.GML.BasicTypes.SignType [" + "]', который я ошибался. – capdragon