Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014
-
3 nov. 2006 à 13:53
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 2008
-
4 nov. 2006 à 01:39
Salut à tous !
J'aimerais déclarer une structure pour pouvoir la manipuler avec FACILITE (Avec des Add, Remove si possible).
Voila ce que j'ai fait :
MA_STRUCTURE contient de 0 à n SOUS_STRUCTURE
une SOUS_STRUCTURE contient de 0 à n SOUS_SOUS_STRUCTURE
public
struct
MA_STRUCTURE
{
public
SOUS_STRUCTURE[ ] SOUS_STRUCTURE_S;
}
public
struct
SOUS_STRUCTURE
{
public
string
NUM_SOUS_STRUCTURE;
public
string
NOM_SOUS_STRUCTURE;
public
SOUS_SOUS_STRUCTURE
[ ] SOUS_SOUS_STRUCTURE_S;
}
public
struct
SOUS_SOUS_STRUCTURE
{
public
string
A;
public
string
B;
public
string
C;
public
string
D;
public
int
E;
public
int
F;
}
Le problême c'est que je veux pouvoir ajouter/supprimer/modifier une SOUS_STRUCTURE appartenant au tableau SOUS_STRUCTURE_S, et ajouter/supprimer/modifier une SOUS_SOUS_STRUCTURE appartenant au tableau SOUS_SOUS_STRUCTURE_S.
Donc ce qu'il faudrait c'est que je puisse écrire ("en gros") :
MA_STRUCTURE M=new MA_STRUCTURE();
M.Add( ... une SOUS_STRUCTURE)
M.Remove (... une SOUS_STRUCTURE)
Moi j'ai l'habitude de faire ça en C (pas d'instanciation, on nomme directement la stucture), et la j'ai quelques problême de déclaration je crois).
Si vous pouviez m'aider un peu ...
Merci d'avance.
vu ce que tu veux faire t'as plutot interet à utiliser des classes et a remplacer tes tableaux par des listes
des listes génériques devraient faire exactement se que tu souhaite
Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014 3 nov. 2006 à 14:09
En fait, exactement.
Il faudrait que mes tableau[] soient des arrayList.
Mais comment déclarer SOUS_STRUCTURE_S
comme une ArrayList de SOUS_STRUCTURE, et SOUS_SOUS_STRUCTURE_S comme une ArrayList de SOUS_SOUS_STRUCTURE ?
Je crois qu'il est la mon problême ...
MMN
Vous n’avez pas trouvé la réponse que vous recherchez ?
Miltiades
Messages postés233Date d'inscriptionvendredi 21 mars 2003StatutMembreDernière intervention25 octobre 2010 3 nov. 2006 à 14:12
la "seule" différence entre une structure et une classe c'est que la structure sera stockée comme s'il s'agissait d'un type (comme un entier par exemple)
Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014 3 nov. 2006 à 14:45
J'ai un Hic :
Quand j'écris
MASTRUCTURE.SOUS_STRUCTURE[i].NOM_SOUS_STRUCTURE= une string
(MASTRUCTURE étant une instanciation de MA_STRUCTURE)
J'ai cette erreur :
Error 1 Cannot modify the return value of 'System.Collections.Generic.List<OptiInfoNC.MesOutils.SOUS_STRUCTURE>.this[int]' because it is not a variable
cs_badrbadr
Messages postés475Date d'inscriptionjeudi 19 juin 2003StatutMembreDernière intervention 3 novembre 20081 3 nov. 2006 à 16:07
Ça ne fonctionnera pas, il faut utiliser les classes.
Théoriquement parlant, les structures sont des valuetype (stocké comme un integer, float, ...) et pour les mettre dans une liste, il faut donc les transferer en mode reference (sur le heap). C'est ce que fait un ArrayList et l'opération s'appelle le boxing/unboxing. Avec les génériques (List<T>), le boxing/unboxing n'est pas utilisé et par conséquent (théoriquement) une structure ne pourras jamais tenir dans une List<T>.
Ca explique l'erreur que t'as.
Moomoon07
Messages postés223Date d'inscriptionmercredi 31 mai 2006StatutMembreDernière intervention 5 mai 2014 3 nov. 2006 à 16:32
Donc peux tu me montrer comment définir une classe Tableau qui contient un nombre INDEFINI de tableauxA, contenant eux même des champs et un nombre INDEFINI de tableauxB, contenant eux même différents champs ? (Champ = chaine, int ...)
Je veux pouvoir modifier les valeurs des champs, modifier/Ajouter/supprimer des tableauxA et des tableauB.
Lutinore
Messages postés3246Date d'inscriptionlundi 25 avril 2005StatutMembreDernière intervention27 octobre 201241 3 nov. 2006 à 17:01
Badrbadr, on peut utiliser une liste générique de structs, dans ce cas il n y a pas de boxing/unboxing, dans le ArrayList le box/unbox vient du fait qu'en interne le ArrayList maintient un tableau d'objets ( Objects ).
Moomoon, que tu alloues une struct avec new ou sans new, c'est quasi la même chose, dans les deux cas ça reste un type "valeur" le new n'alloue pas la structure dans le tas ( heap ) mais sans new les champs sont non initialisés, mais le compilo te previent si tu tentes d'y accèder avant.de les initialiser.