Aqui está um MRE:
FileAccessPermissions permissions = FileAccessPermissions.Read | FileAccessPermissions.Special;
Console.WriteLine(permissions.ToString("G"));
Console.WriteLine(permissions.ToString("F"));
Console.WriteLine(permissions.ToString("D"));
Console.WriteLine(permissions.ToString("X"));
[Flags]
enum FileAccessPermissions
{
None = 0,
Read = 1,
Write = 2,
Execute = 4,
Delete = 8,
Special = 16,
ReadWrite = Read | Write,
}
Para minha surpresa, não consigo encontrar um exemplo singular em que o especificador de formato G
e o F
produzem saídas diferentes. Eu obtenho isso para este exemplo:
Read, Special
Read, Special
17
00000011
Se eu fizer:
FileAccessPermissions permissions = FileAccessPermissions.ReadWrite;
Eu recebo:
ReadWrite
ReadWrite
3
00000003
Se você remover o
[Flags]
atributo, os dois especificadores de formato fornecerão valores diferentes, por exemplo:(FileAccessPermissions)17
:Saída:
Da documentação :
Está literalmente mencionado nos documentos:
retorna
7
, enquantoretorna
Monday, Saturday
.No seu caso, ambos são idênticos, porque seu
enum
é marcado comFlagsAttribute
. No entanto, para oG
modificador -, a soma de vários valores é exibida apenas como string, quando o enum é marcado comFlags
, caso contrário, será exibido como um número:contra