2011-02-07 24 views
41

¿Es posible declarar una Guid constante en C#?¿Cómo declarar un Guid constante en C#?

Entiendo que puedo declarar un static readonly Guid, pero ¿hay una sintaxis que me permita escribir const Guid?

+5

¿Qué pasa con un Guid de lectura estática? – Pedro

+1

Nada, si es la única forma de hacerlo. – smartcaveman

+1

@Pedro, una const se evalúa en tiempo de compilación, una estática se evalúa en tiempo de ejecución. –

Respuesta

45

No. El modificador const solo se aplica a los tipos "primitivos" (bool, int, float, double, long, decimal, short, byte) y strings. Básicamente cualquier cosa que puedas declarar como literal.

+6

En realidad se define al revés. Puede usar 'const' para cualquier valor literal en tiempo de compilación. C# no define realmente el término "tipo primitivo"; es técnicamente solo jerga. El uso de otros lenguajes realmente define el término "tipos primitivos" y tiene una lista fija de dichos tipos. De hecho, hay un solo tiempo de compilación literal para 'Guid', y eso es' predeterminado (Guid) '. Sin embargo, ese es el único literal de tiempo de compilación para Guid. – Servy

18

Aunque parece que no puede hacer que usted puede hacer eso a ser analizado siempre que lo necesite:

const string _myGuidStr = "e6b86ea3-6479-48a2-b8d4-54bd6cbbdbc5"; 

Pero no utiliza la anterior GUID ya que me pertenece exclusivamente, que generó por primera vez ¡así que reclamo la propiedad de este guid en particular de arriba! Pero soy generoso, utiliza este en su lugar (no me gusta cómo me responde, pero es un buen guid general cuando mantiene la boca cerrada): 284c694d-d9cc-446b-9701-b391876c8394

+8

+1, aunque su GUID me volvió a hablar también. –

+7

debería considerar vender Guids ... –

+5

@ZarShardan ¡Son únicos en su tipo! –

32

Declare como static readonly Guid en lugar de const Guid

+0

Creo que esta es la mejor respuesta porque es la única que ofrece una alternativa sin cambiar el resultado final, el estático de solo lectura se puede usar de la misma manera que un const, incluyendo intellisense – Raffaeu

+1

@Raffaeu: es una publicación muy útil (+1 de mí), pero técnicamente, ni siquiera responde la pregunta ("¿Es posible declarar una Guid constante en C#?"), Ni da ninguna explicación sobre * why * la respuesta es sí o no. Proporciona una solución, pero no explica cómo 'static readonly' difiere de' const', y cuál es la implicación de usar uno en lugar del otro. Por lo tanto, está lejos de lo que debería ser una "mejor respuesta". – Heinzi

3

lo estoy haciendo de esta manera:

public static class RecordTypeIds 
{ 
    public const string USERS_TYPEID = "5C60F693-BEF5-E011-A485-80EE7300C695"; 
    public static Guid Users { get { return new Guid(EntityTypeIds.USERS_TYPEID); } } 
} 
+7

obtendrá un rendimiento marginalmente mejor con un campo de solo lectura en lugar de una propiedad que crea un nuevo Guid para cada acceso – smartcaveman

+1

Me gusta su respuesta lo mejor menos la propiedad get. Estoy de acuerdo con smartcaveman ... solo haz que sea público y estático de solo lectura Guid. –

+1

Ohh y la única razón por la que me gusta esto lo mejor es que permite que la cadena se use en la declaración de cambio.Todos los demás lugares que uso el estático de solo lectura Guid. –

19
public static readonly Guid Users = new Guid("5C60F693-BEF5-E011-A485-80EE7300C695"); 

y eso es todo.

+3

Eso no es constante, solo con solo – Darius

+1

Sin embargo, es una alternativa adecuada. –

+3

No es una alternativa adecuada si necesita algo que se evalúa en tiempo de compilación. –

Cuestiones relacionadas