2011-02-07 8 views
41

Можно ли объявить константу Guid в C#?Как объявить константу Guid в C#?

Я понимаю, что могу объявить static readonly Guid, но есть ли синтаксис, который позволяет мне писать const Guid?

+5

Что не так с помощью static readonly Guid? – Pedro

+1

Ничего, если это единственный способ сделать это. – smartcaveman

+1

@Pedro, const оценивается во время компиляции, статическое значение оценивается во время выполнения. –

ответ

45

Нет. Модификатор const применяется только к «примитивным» типам (bool, int, float, double, long, decimal, short, byte) и строкам. В принципе все, что вы можете объявить как литерал.

+6

Это фактически определено наоборот. Вы можете использовать 'const' для любых значений времени компиляции. C# фактически не определяет термин «примитивный тип»; это технически просто сленг. Использование других языков на самом деле определяет термин «примитивные типы» и имеет фиксированный список таких типов. На самом деле, существует единственный компиляционный литерал времени для 'Guid', и это' default (Guid) '. Это единственный компилятор времени для Guid. – Servy

18

Хотя вы не можете делать, что вы можете сделать, чтобы быть разобраны, когда вам это нужно:

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

Но не используйте выше Guid, как он относится ко мне только, я первый генерироваться так что я заявляю о праве собственности на этот конкретный указатель выше! Но я щедрый - использую это вместо этого (мне не нравится, как он говорит мне, но это хорошо, когда он закрывает рот): 284c694d-d9cc-446b-9701-b391876c8394

+8

+1, хотя ваш GUID тоже обратился ко мне. –

+7

Вы должны рассмотреть возможность продажи Гидов ... –

+5

@ZarShardan Они единственные в своем роде! –

32

Объявить это, как static readonly Guid, а не const Guid

+0

Я считаю, что это лучший ответ, потому что он является единственным, который предоставляет альтернативу без изменения конечного результата, статический readonly может использоваться так же, как и const, включая intellisense – Raffaeu

+1

@ Raffaeu: Это очень полезная публикация (+1 от меня), но технически он даже не отвечает на вопрос («Можно ли объявить постоянный Guid в C#?»), И он не дает никакого объяснения * почему * ответ да или нет. Он обеспечивает обходное решение, но не объясняет, как «static readonly» отличается от 'const' и что подразумевается при использовании одного вместо другого. Таким образом, это далеко не так, как должен выглядеть «лучший ответ». – Heinzi

3

Я делаю это так:

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

вы получите минимально лучшую производительность с полем readonly вместо свойства, которое создает новый указатель для каждого доступа. – smartcaveman

+1

Мне нравится ваш ответ на лучший минус свойство get. Я согласен с smartcaveman ... просто сделайте это публичным статическим readonly Guid. –

+1

Ох, и только причина, по которой мне это нравится, лучше всего то, что она позволяет использовать строку в инструкции switch.Во всех других местах я использую static readonly Guid. –

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

и баста.

+3

Это не постоянный, только только что прочитанный – Darius

+1

Это, однако, подходящая альтернатива. –

+3

Это не подходящая альтернатива, если вам нужно что-то, что оценивается во время компиляции. –

Смежные вопросы