Oppure

Loading
17/05/18 16:18
Carlo
Ok, ci guardo meglio...

@nessuno

Nel programma conversione misure, ho permesso all'utente di inserire nuove unità di misura e nuove scale, per fare questo ho dovuto ridimensionare le tre matrici bidimensionali, che contengono tutti i parametri.

Ho fatto così:
String[,] ArrayScala = new String[,] {{"Kelvin", "Celsius", "Fahrenheit", "Rankine", "Delisle", "Réaumur", "Newton", "Rømer"},
                                              {"Braccia", "Miglia", "Yarde", "Kilometri", "Metri", "Pollici", "Piedi", "Miglia Nautiche"},
                                              {"Galloni Usa", "Litri", "Galloni Uk", "Ettolitri", "Pinte USA", "Quarti USA", "Pinte UK", "Quarti UK"},
                                              {"Pascal", "Bar", "Torr", "Millimetri H2O", "Atmosfere", "Kg forza", "Atmosfere tec", "Barye"},
                                              {"Kilogrammi", "Stone", "Libbre", "Once", "Grani", "Carati", "Tonnellate", "Grammi"},
                                              {"Joule", "Kcalorie", "Wattora", "Kwattora", "Elettronvolt", "Uk Thermal u", "Us Thermal u", "Piedi x libbra"}};
               
                int Elementi0 = ArrayScala.GetUpperBound(0) + 1; // ridimensiono a sinistra
                int Elementi1 = ArrayScala.GetUpperBound(1); // non ridimensiono, le scale restano sempre 8

                // Ridimensiono ArrayScala
                // Prima creo una matrice con le nuove dimensioni
                string[,] tempVar = new string[Elementi0 + 1, Elementi1 + 1];
                Array.Copy(ArrayScala, tempVar, ArrayScala.Length);
                ArrayScala = tempVar;

                // una dimensione in +, otto elementi in + 
                // riempimento con stringhe fittizie

               for (int i = 0; i < Elementi1 + 1; i++)
                {
                    ArrayScala[6, i] = "Scala " + i.ToString();
                }

Come avrei dovuto fare?

nessuno
Leggi bene gli esempi dal link.... trovi tutto


Ho riletto meglio, c'è scritto, ma si capisce solo dopo che lo sai...:)
Ho letto anche del ridimensionamento di matrici multidimensionali, con il ciclo di for, sinceramente mi piace di più come ho fatto io.:asd:
Ultima modifica effettuata da Carlo 17/05/18 16:42
in programmazione tutto è permesso
17/05/18 18:48
Ultimo
Postato originariamente da Carlo:

Postato originariamente da nessuno:

Redim (Preserve) è uno statement inefficiente e obsoleto, che proviene dal VB precedente e che funziona solo grazie al riferimento allo spazio dei nomi Microsoft.VisualBasic (che dovrebbe essere eliminato da tutti i progetti VB.NET per evitare l'uso di statement/funzioni obsolete).

Sia in VB.NET che in C#, per un array a una sola dimensione, si usa la classe Array
msdn.microsoft.com/it-it/library/…(v=vs.110).aspx
e si scrive qualcosa del genere

        Dim arr As String() = {"Carlo", "Rossi", "Roma"}

        System.Array.Resize(arr, arr.Length + 1)
        arr(3) = "Firenze"

        Console.WriteLine(arr(3))



            string[] arr = new string[] { "Carlo", "Rossi", "Roma" };

            System.Array.Resize(ref arr, arr.Length + 1);
            arr[3] = "Firenze";

            Console.WriteLine(arr[3]);


In realtà, con .NET è preferibile usare un ArrayList o un Generics


In VB .Net Array.Resize mi funzionava alla grande, ma in C# no e ora grazie a nessuno so anche il perché.
In: msdn.microsoft.com/it-it/library/…(v=vs.110).aspx
il "ref" non c'è, invece è indispensabile, dagli aiuti lo avevo notato, e avevo provato varie combinazioni, tutte sbagliate!!

Ho adottato il mio motto "in programmazione tutto è permesso", scrivendo il codice che ho postato prima, ora inutile.:k:

EDIT: il mio codice funziona anche con le matrici multidimensionali, invece come si dovrebbe fare?


Carlo il C# non accetta dichiarazioni implicite, a differenza del VB.NET, per questo il "ref" deve essere inserito
esplicitamente.
If ok Then GOTO Avanza else GOTO Inizia

17/05/18 19:18
Carlo
@ Ultimo
Grazie, credo di aver capito l'errore che ho fatto, quando ho letto le MSDN ho letto per il C#, ma poi nell'esempio non ho cambiato da VB a C#.
L'aiuto di VS mi ha avvertito che un parametro non era corretto, e mi ha proposto Array.Resize <T> (ref T[] array, int newSize)
Ho provato varie configurazioni tutte sbagliate, 1 es (sbagliato): Array.Resize string (ref string[] MioArray, MioArray.Length +1)
Che tonto...:asd:
Ultima modifica effettuata da Carlo 17/05/18 19:22
in programmazione tutto è permesso
17/05/18 19:26
Thejuster
esatto.

il termine T è identificato come generico.
quindi va bene anche una variabile di tipo dinamica come var.
chiede esplicitamente un riferimento ad un tipo.

proprio come hai scritto

Array.Resize <Tipo> (ref Tipo[] array, int newSize)


string[] array = new string[3];


array.Resize<string>(ref array,array.lenght +1);


mire.forumfree.it/ - Mire Engine
C# UI Designer
17/05/18 19:49
Carlo
Postato originariamente da Thejuster:

esatto.

il termine T è identificato come generico.
quindi va bene anche una variabile di tipo dinamica come var.
chiede esplicitamente un riferimento ad un tipo.

proprio come hai scritto

Array.Resize <Tipo> (ref Tipo[] array, int newSize)


string[] array = new string[3];


array.Resize<string>(ref array,array.lenght +1);



:k::k::k::k: ora è semplice
in programmazione tutto è permesso
18/05/18 7:49
La questione è che non dovresti usare Array ma classi (Generics) per cui non ti devi interessare di "allocare"/"deallocare" elementi.

Continui a ragionare come si faceva 20 anni fa e come se non stessi utilizzando strumenti e linguaggi fortemente OOP.
18/05/18 8:51
torn24
thread interessante, leggendo i post di nessuno imparo sempre qualcosa di nuovo :)

Però il fatto che voglia salvare, nome, cognome e indirizzo, mi fa pensare che forse avrebbe dovuto crearsi una classe e poi usare una list, non so per quale motivo ha necessità di usare array ?
aaa
18/05/18 10:42
È così torn, dovrebbe usare List e classi e affidarsi al garbage collector di .net.

Lui lavora con array perché purtroppo è legato a vecchi concetti. Già con vb6 si poteva fare di meglio
Ultima modifica effettuata da 18/05/18 10:50