Inicializace pole na libovolný počáteční index v C #

hlasů
6

Je to možné, v jazyce C # pro inicializaci pole v, například, subindex 1?

Pracuji s Office interop, a každá vlastnost je objekt pole, které začíná v bodě 1 (předpokládám, že to bylo původně naprogramovaný v VB.NET), a nelze jej měnit, musíte nastavit celého pole, aby mohla přijmout Změny.

Jako řešení jsem klonování původního pole, úpravy, že jeden, a nastavit ji jako celek, když jsem udělal.

Ale mě napadlo, jestli to bylo možné vytvořit nové pole založené nenulová

Položena 17/09/2008 v 14:06
zdroj uživatelem
V jiných jazycích...                            


8 odpovědí

hlasů
0

Můžete napsat svůj vlastní třídu pole

Odpovězeno 17/09/2008 v 14:09
zdroj uživatelem

hlasů
-1

V VB6 byste mohli změnit pole začít s 0 nebo 1, takže si myslím, VBScript můžete udělat totéž. Pro C #, to není možné, ale můžete jednoduše přidávat hodnotu NULL v prvním [0] a zahájit skutečnou hodnotu v [1]. Samozřejmě, že je to trochu nebezpečné ...

Odpovězeno 17/09/2008 v 14:10
zdroj uživatelem

hlasů
1

Není prostě. Ale můžete samozřejmě napsat svůj vlastní třídu. To by měl uspořádání jako soukromou proměnnou, a uživatel by si, že jeho pole začíná na 1, ale ve skutečnosti to začíná na nule a máte odečtením 1 ze všech jeho pole přístupů.

Odpovězeno 17/09/2008 v 14:10
zdroj uživatelem

hlasů
7

Můžete použít Array.CreateInstance.

Viz Druhy pole v .NET

Odpovězeno 17/09/2008 v 14:11
zdroj uživatelem

hlasů
0

Nemyslím si, že pokud je to možné upravit počáteční index pole.

Chtěl bych vytvořit svůj vlastní pole pomocí generik a zvládnout ho dovnitř.

Odpovězeno 17/09/2008 v 14:11
zdroj uživatelem

hlasů
0

Jen mějte na const int s názvem ‚offset‘ s hodnotou jedna a vždy dodat, že do svých indexů v kódu.

Odpovězeno 17/09/2008 v 14:12
zdroj uživatelem

hlasů
0

Nemyslím si, že si můžete vytvořit nenulové pole založené v jazyce C #, ale můžete snadno psát třídu obálky svůj vlastní kolem vestavěné v datových structures.This wrapper třídě by se uspořádat vlastní instance typu pole, které jsou nutné; přetížení [] operátor indexování není povoleno, ale můžete přidat indexovaných do třídy, aby se chová jako polohovatelné pole, viz zde . Funkce index píšete by pak mohla přidat (nebo odebrat) 1, všem index je předán.

Dalo by se pak použít objekt následujícím způsobem, a to by chovat správně:

myArrayObject[1]; //would return the zeroth element.
Odpovězeno 17/09/2008 v 14:14
zdroj uživatelem

hlasů
18

Je možné dělat, co žádáte viz níže uvedený kód.

// Construct an array containing ints that has a length of 10 and a lower bound of 1
Array lowerBoundArray = Array.CreateInstance(typeof(int), new int[1] { 10 }, new int[1] { 1 });

// insert 1 into position 1
lowerBoundArray.SetValue(1, 1);

//insert 2 into position 2
lowerBoundArray.SetValue(2, 2);

// IndexOutOfRangeException the lower bound of the array 
// is 1 and we are attempting to write into 0
lowerBoundArray.SetValue(1, 0);
Odpovězeno 17/09/2008 v 15:12
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more