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

Ma posso creare un array unidimensionale con il limite inferiore diverso da zero?

Posso creare array MULTIdimensionali con un limite inferiore diverso da zero; lo spiega Richter nel suo libro alla pagina 318 e poi con un copia e incolla dello stesso esempio in SLAR alla pagina 49.

Ma se voglio "estrapolare" lo stesso metodo per un array UNIdimensionale in una sintassi immaginaria:

int[] a = new int[lb..ub]; // questa sintassi non è ancora implementata!

dove lb è lower bound (per esempio 100) e ub è upper bound (per esempio 1000), scrivere:

int[] a;
// dichiarare e inizializzare lb e ub...
a = (int[])Array.CreateInstance(typeof(int), new int[1]{ub - lb + 1}, new int[1]{lb});

dà a run-time l'errore System.InvalidCastException ("Specified cast is not valid").

Scrivendo in output il tipo dell'espressione qui sopra, vediamo che cast non è valido:

Console.WriteLine(Array.CreateInstance(typeof(int), new int[1]{ub - lb + 1}, new int[1]{lb}).ToString());

Questo WriteLine scrive a console per un array UNIdimensionale una roba mai vista e mai letta da nessuna parte:

System.Int32[*]

Se invece avessimo un array MULTIdimensionale (per esempio bidimensionale), l'output sarebbe:

System.Int32[,]

Praticamente, l'InvalidCastException si ottiene provando il cast da Int32[*] a Int32[]. Ma cosa vuol dire quell'asterisco? E perché sembra che non possa avere un array UNIdimensionale con il limite inferiore diverso da zero?

Print | posted on domenica 19 settembre 2004 00:18 | Filed Under [ Carillon .NET ]

Powered by:
Powered By Subtext Powered By ASP.NET