Para demonstrar como esse método nos ajuda, vou utilizar e enumeração FileAttributes (System.IO) que fornece atributos de arquivos e pastas.
Podemos verificar na documentação que essa enumeração possui o atributo FlagsAttribute.
[SerializableAttribute] [FlagsAttribute] [ComVisibleAttribute(true)] public enum FileAttributes
Vamos criar uma instância dessa enumeração tentando recuperar os atributos existentes na pasta C:\Windows\Temp. Para isso, podemos utilizar o método estático GetAttributes da classe File.
var fileAttributes = File.GetAttributes(@"C:\Windows\Temp\");
Obs.: Não confunda os atributos do .NET, que são um mecanismo de atribuição de informação adicional em tipos e membros, com os atributos dos arquivos e pastas que são propriedades associadas a estes pelo sistema operacional.
Nas versões anteriores, se quiséssemos verificar se o arquivo (File) possui o flag FileAttributes.Directory por exemplo, o código ficaria assim:
if ((fileAttributes & FileAttributes.Directory) == FileAttributes.Directory) Console.WriteLine("É uma pasta...");
Com a adição do método HasFlag, o código anterior pode ser feito tal como abaixo.
if (fileAttributes.HasFlag(FileAttributes.Directory)) Console.WriteLine("É uma pasta...");
É uma maneira mais simples e acho que também um código um pouco mais elegante.
O único inconveniente é que o método HasFlag possui como parâmetro um tipo System.Enum, não sendo possível pelo Visual Studio “adivinhar” (realizar type inference) e sugerir um flag da enumeração enquanto digitamos o código.
Até a próxima.
Enum.HasFlag
http://bit.ly/ceG0ls
FlagsAttribute Class
http://bit.ly/bfTdyP
FileAttributes Enumeration
http://bit.ly/9xZW79
Nenhum comentário:
Postar um comentário