Формат строчной строки .NET GUID

Мне нужно отформатировать мои GUID в пунктирном формате, все в верхнем регистре. Я знаю, что использование myGuid.ToString("D") или String.Format("{0:D}", myGuid) дает пунктирный формат, но использование прописной буквы D в отличие от нижнего регистра D не дает мне идентификатор GUID с верхним регистром, как я думал. Есть ли способ сделать это, не делая ничего сумасшедшего, или мне просто нужно позвонить myGuid.ToString().ToUpper()?

Ответ 1

Мне просто нужно позвонить myGuid.ToString().ToUpper()

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

Ответ 2

Обратите внимание, что RFC 4122, который определяет спецификацию UUID, предусматривает, что шестнадцатеричные символы вывода должны быть в нижнем регистре при преобразовании структуры в строку:

  The hexadecimal values "a" through "f" are output as
  lower case characters and are case insensitive on input.

Это может объяснить, почему структура Guid не поддерживает вывод напрямую в виде строки в верхнем регистре.

Поскольку параметр поставщика формата ToString игнорируется, единственная альтернатива (без простого преобразования строки в верхний регистр) будет заключаться в том, чтобы непосредственно манипулировать байтами, сохраняя при этом сохранение контентоспособности. Простое преобразование в верхний регистр (прямо или через метод расширения), вероятно, гораздо более прямолинейно.

Ответ 3

Я не думаю, что у вас есть другой выбор, чем просто сделать myGuid.ToString().ToUpper(). Хотя, вы всегда можете написать метод расширения, возможно, что-то вроде ToUpperString, но я не думаю, что в систему что-то встроено.

Ответ 4

Предполагая, что у вас есть класс, в котором содержится ваш Guid, и вы хотели бы сохранить типизированный Guid, вы могли бы сделать что-то вроде этого:

public Guid Identifier { get; set; }

public String FormattedIdentifier => Identifier.ToString().ToUpper();