2009-01-22 12 views

Respuesta

8
  1. poner el enumeraciones justo en el espacio de nombres (o crea un nuevo espacio de nombres para ellos) o
  2. ponerlos en una clase (estática?) En algún lugar si eso tiene más sentido.

Me gustaría mantenerlos en su propio archivo para un fácil acceso y una buena organización de cualquier manera.

Normalmente no los pongo en una clase a menos que de alguna manera "pertenezcan" allí. Como si tuviera una clase de automóvil con una enumeración para los tipos de automóvil, y una clase de carretera y una clase de puente que pueden establecer límites para los tipos de automóvil. Car.CarType parece ser una organización lógica para esto ...

+0

¿Cómo pongo una enumeración en mi espacio de nombres? ¿Cómo creo un archivo así? – Martijn

+2

Crea un nuevo archivo .cs con: namespace MyNameSpace {public enum MyEnum {Value1, Value2, Value3}} –

+0

Así que solo creo una clase? – Martijn

8

Ponlo en su propio archivo y simplemente declarar que:

enumeración pública Foo {a, b, c, d}

Tenga en cuenta sus espacios de nombre, por supuesto.

12

Normalmente, simplemente los arrojo al espacio de nombres. Es lo que hizo Microsoft escritura del marco .NET, así que es lo que hago también, para mantener la coherencia a entender :)

+0

bueno, no sabía que pudieras hacer eso –

3

He aquí un ejemplo de tener dos enumeraciones en diferentes espacios de nombres:

using TotallyDifferentNameSpace.Enums; 

namespace EnumEx 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      CarType car = CarType.Audi; 
      PetrolType pType = PetrolType.Diesel; 
     } 
    } 

    public enum CarType 
    { 
     Volkswagen, 
     Audi, 
     Toyota, 
     Ford, 
     Porsche, 
     Lada 
    } 
} 

namespace TotallyDifferentNameSpace.Enums 
{ 
    public enum PetrolType 
    { 
     Gasoline, 
     Diesel 
    } 
} 
-8

Mi consejo es que no se usa Enums en absoluto. Use singletons en su lugar.

Como

public class A : ISomeInterface 
    { 
     public static readonly A Instance = new A(); 
     private A() 
     { 
     } 

    } 

    public class B : ISomeInterface 
    { 
     public static readonly B Instance = new A(); 
     private B() 
     { 
     } 
    } 

En la mayoría de los casos que funciona mejor y es mejor extender más tarde.

mejores deseos

Matze

+0

Esto es algo similar al tipo de modelo de enum seguro, pero es sobreinnovación sin ningún motivo. Mantente ágil, refactoriza tus enums más tarde si es necesario. – DarkwingDuck

+0

Se inicia el problema si necesita extender sus Enumeces más tarde. Un nuevo valor para el cliente A, otro para el cliente B. ¡Boom! ¡UPS! Ambos mapeados a la misma int. Por supuesto, si está 100% seguro de que Enum nunca cambiará ... – Matze

+0

Si cree que las enumeraciones cambiarán, no debe usar enumeraciones. Use clases en su lugar. –

7

comentarios XML ayuda, especialmente si otros se utilizan

/// <summary> 
/// Defines the types of cars we support 
/// </summary> 
public enum CarType 
{ 
    /// <summary> 
    /// VW - the peoples car 
    /// </summary> 
    Volkswagen, 

Su nombre enumeración debe ser plural (según las instrucciones de FxCop)

public enum CarTypes 

Agregue valores numéricos y use numeración bit a bit incluso si no planea usar bitw ise (es un dolor volver a numerar más tarde).

Volkswagen = 1, 

    /// <summary> 
    /// They own lambo... can't be all that bad 
    /// </summary> 
    Audi = 2, 

    /// <summary> 
    /// Good, cheap, reliable 
    /// </summary> 
    Toyota = 4, 
1

Se puede poner una enumeración es un nuevo CodeFile con extensión .cs, por IntelliSense para trabajar asegurarse de que es parte de su proyecto/solución y por supuesto que debe haber una enumeración pública para que tenga un alcance de la solución de eso. Si intellisense es un problema, asegúrese de construir su solución una vez, tuve este problema una vez y solo lo reconstruí. El espaciado de nombres es una buena opción si desea organizar su código correctamente y está codificando un proyecto grande. El framework .NET era grande. por lo que tiene enumeraciones bajo espacios de nombres solo para una mejor comprensión y organización del código.

0

Sé que mi sugerencia va en contra del.NET Naming conventions, pero personalmente prefijo enumeraciones con 'E' y enum flags con 'F' (similar a cómo prefijamos Interfaces con 'I'). Realmente no entiendo por qué esta no es la convención. Los Enum/Flags son un caso especial, como interfaces que nunca cambiarán su tipo. No solo deja en claro lo que es, es muy fácil escribir en intellisense ya que el prefijo filtrará la mayoría de los otros tipos/variables/etc., y no tendrá estos conflictos de nombres.

Y eso también resolvería otro problema donde para ejemplos en WPF utilizan clases estáticas como enumeraciones (por ejemplo, FontWeights) que tienen instancias predefinidas de tipos pero no sabría si no las busca. Si acaban prefijos con 'E', todo lo que tendrías que hacer es escribir el carácter para encontrar estas clases estáticas especiales.

Cuestiones relacionadas