2009-08-19 34 views

risposta

7

Su un array multidimensionale in VB o varie API derivate da COM è possibile eseguire query sul limite inferiore per dimensione. I tipi di matrice possono essere basati su 0 o 1 (cioè a partire da zero o 1) e questo vale anche per gli array multidimensionali.

Questo può essere applicato anche agli array esposti tramite interoperabilità COM. Ad esempio, molte API di Excel utilizzano array basati su 1 e molte funzioni di API utilizzano array di varianti come parametri (la variante è stata essenzialmente inventata come un tipo di dati per una cella del foglio di calcolo).

Quando si utilizza l'interoperabilità COM, è ancora necessario giocare bene con queste API e sistemi di tipi. Sono stati originariamente progettati per essere utilizzati con VBA e le varianti di linguaggio VB4-6 "classiche" avevano un sistema di tipo veramente barocco grazie al loro accoppiamento stretto con COM. I sistemi di tipo .Net di C# et. al. sono un po 'meno dolorosi dei loro predecessori basati su COM, ma si percepisce ancora il dolore quando si utilizza l'interoperabilità COM.

+2

si mispelled rotto. :) – quillbreaker

+9

hai sbagliato a scrivere "errato";) – Marc

+6

No, intendevo veramente "barocco" come in "mostruosità barocca", in contrapposizione a "se non è barocco, non aggiustarlo". ; -} – ConcernedOfTunbridgeWells

16

In teoria, è possibile creare matrici con limiti inferiori o superiori per l'indicizzazione. VB.NET può utilizzarlo per creare array con un limite inferiore di 1 per essere compatibili con alcune versioni VB precedenti, ma è possibile utilizzare lo Array.CreateInstance(Type,Int32[],Int32[]) per creare un array con qualsiasi limite inferiore desiderato.

3

C'è una CreateInstance chiamata che imposta non zero limiti inferiori:

CreateInstance(Type, Int32[], Int32[])
crea una matrice multidimensionale del tipo e della dimensione lunghezze specificate, con i limiti inferiori specificati.

Confrontare questo:

CreateInstance(Type, Int32[])
crea una matrice multidimensionale di tipo e dimensioni determinate lunghezze, con indicizzazione in base zero. Le lunghezze delle dimensioni sono specificate in una matrice di numeri interi a 32 bit.

(o ad uno qualsiasi degli altri sovraccarichi, in effetti. Dei sei CreateInstance sovraccarichi, cinque creare una matrice a base zero.)