Формат строки верхнего регистра .NET GUID

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

4 ответов


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

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


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

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

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

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


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


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

public Guid Identifier { get; set; }

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