Web Log di Adrian Florea

"You know you've achieved perfection in design, not when you have nothing more to add, but when you have nothing more to take away." Antoine de Saint-Exupery
posts - 440, comments - 2715, trackbacks - 3944

My Links

Archives

Post Categories

Image Galleries

.RO Blogs

.RO People

.RO Sites

Blogs

Furls

Links

vinCitori

L'influenza di System.FlagsAttribute su ToString

Incuriosito da questo frammento dal libro di Box & Sells (l'edizione italiana, p. 119):

"L'attributo [System.Flags] influenza anche l'implementazione di ToString in modo che la rappresentazione in stringa del valore sarà una lista separata da virgole dei nomi dei membri anziché del singolo membro.",

ho giocato un po'. Per esempio, questo snippet:

using System;

class Foo
{
  [Flags]
  enum NaN
  {
    Non = 1,
    un = 2,
    numero = 4,
    reale = 8
  }

  static void Main()
  {
    NaN f = NaN.Non | NaN.un | NaN.numero | NaN.reale;
    Console.WriteLine(double.NaN.ToString(new System.Globalization.CultureInfo("it-IT")));
    Console.WriteLine(f.ToString().Replace(",", string.Empty));
    Console.Read();
  }
}

stampa a video:

Non un numero reale
Non un numero reale

Un esempio meno folle :-) lo trovate nella documentazione di System.FlagsAttribute.
Continuando a giocare, sono partito da questo snippet:

using System;

class Bar
{
  [Flags]
  enum Baz
  {
  }

  static void Main()
  {
    Baz b = (Baz)2004;
    Console.WriteLine(b.ToString());
    Console.Read();
  }
}

che stampa a video 2004. Niente di strano.
Ma, se al posto di 2004 scriviamo 0, otteniamo System.IndexOutOfRangeException!...

using System;

class Bar
{
  [Flags]
  enum Baz
  {
  }

  static void Main()
  {
    Baz b = (Baz)0;
    Console.WriteLine(b.ToString());
    Console.Read();
  }
}

Cosa che non succederebbe se togliessimo l'attributo [Flags]:

using System;

class Bar
{
  enum Baz
  {
  }

  static void Main()
  {
    Baz b = (Baz)0;
    Console.WriteLine(b.ToString());
    Console.Read();
  }
}

Qual è la vostra spiegazione per il comportamento di questi ultimi 2 snippet?

Print | posted on giovedì 29 luglio 2004 03:59 | Filed Under [ Quiz Sharp Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET