Можно ли объявить константу Guid в C#?Как объявить константу Guid в C#?
Я понимаю, что могу объявить static readonly Guid
, но есть ли синтаксис, который позволяет мне писать const Guid
?
Можно ли объявить константу Guid в C#?Как объявить константу Guid в C#?
Я понимаю, что могу объявить static readonly Guid
, но есть ли синтаксис, который позволяет мне писать const Guid
?
Нет. Модификатор const
применяется только к «примитивным» типам (bool, int, float, double, long, decimal, short, byte) и строкам. В принципе все, что вы можете объявить как литерал.
Это фактически определено наоборот. Вы можете использовать 'const' для любых значений времени компиляции. C# фактически не определяет термин «примитивный тип»; это технически просто сленг. Использование других языков на самом деле определяет термин «примитивные типы» и имеет фиксированный список таких типов. На самом деле, существует единственный компиляционный литерал времени для 'Guid', и это' default (Guid) '. Это единственный компилятор времени для Guid. – Servy
Хотя вы не можете делать, что вы можете сделать, чтобы быть разобраны, когда вам это нужно:
const string _myGuidStr = "e6b86ea3-6479-48a2-b8d4-54bd6cbbdbc5";
Но не используйте выше Guid, как он относится ко мне только, я первый генерироваться так что я заявляю о праве собственности на этот конкретный указатель выше! Но я щедрый - использую это вместо этого (мне не нравится, как он говорит мне, но это хорошо, когда он закрывает рот): 284c694d-d9cc-446b-9701-b391876c8394
+1, хотя ваш GUID тоже обратился ко мне. –
Вы должны рассмотреть возможность продажи Гидов ... –
@ZarShardan Они единственные в своем роде! –
Объявить это, как static readonly Guid
, а не const Guid
Я считаю, что это лучший ответ, потому что он является единственным, который предоставляет альтернативу без изменения конечного результата, статический readonly может использоваться так же, как и const, включая intellisense – Raffaeu
@ Raffaeu: Это очень полезная публикация (+1 от меня), но технически он даже не отвечает на вопрос («Можно ли объявить постоянный Guid в C#?»), И он не дает никакого объяснения * почему * ответ да или нет. Он обеспечивает обходное решение, но не объясняет, как «static readonly» отличается от 'const' и что подразумевается при использовании одного вместо другого. Таким образом, это далеко не так, как должен выглядеть «лучший ответ». – Heinzi
Я делаю это так:
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); } }
}
вы получите минимально лучшую производительность с полем readonly вместо свойства, которое создает новый указатель для каждого доступа. – smartcaveman
Мне нравится ваш ответ на лучший минус свойство get. Я согласен с smartcaveman ... просто сделайте это публичным статическим readonly Guid. –
Ох, и только причина, по которой мне это нравится, лучше всего то, что она позволяет использовать строку в инструкции switch.Во всех других местах я использую static readonly Guid. –
public static readonly Guid Users = new Guid("5C60F693-BEF5-E011-A485-80EE7300C695");
и баста.
Это не постоянный, только только что прочитанный – Darius
Это, однако, подходящая альтернатива. –
Это не подходящая альтернатива, если вам нужно что-то, что оценивается во время компиляции. –
Что не так с помощью static readonly Guid? – Pedro
Ничего, если это единственный способ сделать это. – smartcaveman
@Pedro, const оценивается во время компиляции, статическое значение оценивается во время выполнения. –