OVH Cloud OVH Cloud

Modification ArrayList ?

12 réponses
Avatar
Vincent
Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure : personne.nom
personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent

10 réponses

1 2
Avatar
Arnaud CLERET
La syntaxe est la bonne si ce n'est qu'il est utilise de caster l'object
vers le type "Personne" :
- ((Personne)CLIENT[indice]).age = 25;

Par contre comment avez-vous implémenté la propriété "age" de votre
structure "Personne" ?
Possède-t-elle un accesseur où est-elle readonly ?

--
arno - http://www.dotnetguru2.org/acleret/

"Vincent" a écrit dans le message de news:

Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure :
personne.nom personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent



Avatar
Delf
Vincent a écrit :

Comment modifier un élément ? du style CLIENT[indice].age = 25



CLIENT[indice] te retourne un objet de type... 'object'. Tu dois donc
caster cet objet dans son type d'origine.

object o = (Personne)CLIENT[indice];

Donc

((Personne)Client[indice]).age = 25;

--
Delf
Avatar
Vincent
Super, Merci beaucoup

Vincent

"Delf" a écrit dans le message de news:
4423c336$0$13226$
Vincent a écrit :

Comment modifier un élément ? du style CLIENT[indice].age = 25



CLIENT[indice] te retourne un objet de type... 'object'. Tu dois donc
caster cet objet dans son type d'origine.

object o = (Personne)CLIENT[indice];

Donc

((Personne)Client[indice]).age = 25;

--
Delf


Avatar
DVDB
Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de votre
code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement typé,
ce qui permet d'eviter les cast, fournit une détection des erreurs de types à
la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :

Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure : personne.nom
personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent


.



Avatar
Vincent
Oui c'est très sympa, dans l'idée c'est très proche de vector en c++

Vincent

"DVDB" a écrit dans le message de news:

Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de
votre
code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement typé,
ce qui permet d'eviter les cast, fournit une détection des erreurs de
types à
la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :

Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure :
personne.nom
personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent


.





Avatar
didier
DVDB a écrit :
Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de votre
code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement typé,
ce qui permet d'eviter les cast, fournit une détection des erreurs de types à
la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :


Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure : personne.nom
personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent


.





Bonjour,
J'ai essayé avec List et ça ne marche pas.
Il me dit que ce n'est pas une variable.
On dirait que c'est en lecture seule ?
Y a un autre truc a faire avant ?

Merci

dans un news précédent il est question d'accesseur et de readonly ?!

encore Merci
Vincent
Avatar
Arnaud CLERET
En effet je parlais d'accesseur et de readonly car quand vous faites :
MaListeClient[0].age%; cela signifie que la propriété "age" de l'objet
"CLIENT" possède un accesseur de type :
public int age
{
get {return this._age}
set {this._age = value}
}
ou plus simplement :
public int age.
Dans ces deux cas l'affectation de valeur doit fonctionner.

Par contre si vous ne stipuler pas le "set" dans l'accesseur ou que vous
déclarer votre propriété avec le mot clé "readonly" ou "const", il vous sera
impossible d'y affecter une valeur telle que vous souhaitez le faire.

--
arno - http://www.dotnetguru2.org/acleret/
"didier" a écrit dans le message de news:

DVDB a écrit :
Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de
votre code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement
typé, ce qui permet d'eviter les cast, fournit une détection des erreurs
de types à la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :


Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure :
personne.nom personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent

.





Bonjour,
J'ai essayé avec List et ça ne marche pas.
Il me dit que ce n'est pas une variable.
On dirait que c'est en lecture seule ?
Y a un autre truc a faire avant ?

Merci

dans un news précédent il est question d'accesseur et de readonly ?!

encore Merci
Vincent


Avatar
Vincent
Merci pour votre aide,
j'ai du mal avec la syntaxe :

si j'ai :

public struc CLIENT
{
public string nom;
int age;
}

ensuite

List<CLIENT> MaListeClient = new List<CLIENT>();

où dois je déclarer :
public int age
{
get {return this._age}
set {this._age = value}
}

Merci

"Arnaud CLERET" a écrit dans le message
de news: %
En effet je parlais d'accesseur et de readonly car quand vous faites :
MaListeClient[0].age%; cela signifie que la propriété "age" de l'objet
"CLIENT" possède un accesseur de type :
public int age
{
get {return this._age}
set {this._age = value}
}
ou plus simplement :
public int age.
Dans ces deux cas l'affectation de valeur doit fonctionner.

Par contre si vous ne stipuler pas le "set" dans l'accesseur ou que vous
déclarer votre propriété avec le mot clé "readonly" ou "const", il vous
sera impossible d'y affecter une valeur telle que vous souhaitez le faire.

--
arno - http://www.dotnetguru2.org/acleret/
"didier" a écrit dans le message de news:

DVDB a écrit :
Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de
votre code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement
typé, ce qui permet d'eviter les cast, fournit une détection des erreurs
de types à la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :


Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure :
personne.nom personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent

.





Bonjour,
J'ai essayé avec List et ça ne marche pas.
Il me dit que ce n'est pas une variable.
On dirait que c'est en lecture seule ?
Y a un autre truc a faire avant ?

Merci

dans un news précédent il est question d'accesseur et de readonly ?!

encore Merci
Vincent






Avatar
Arnaud CLERET
La source de l'erreur est là :
- int age = private int age et non public

Dans tous les cas (et ça n'engage que moi :)), les normes de développements
et bonnes pratiques préviligient le fait :
- De toujours préciser la portée d'un membre (private, public, internal
...)
- D'écrire un accesseur pour tout membre public permettant ainsi
d'effectuer les controles nécessaire lors d'affectation d'une valeur. Par
exemple :
public int age
{
get {return this._age;}
set
{
if(value < 0) throw new ArgumentException("Valeur incompatible
!");
this._age = value;
}
}

--
arno - http://www.dotnetguru2.org/acleret/

"Vincent" a écrit dans le message de news:

Merci pour votre aide,
j'ai du mal avec la syntaxe :

si j'ai :

public struc CLIENT
{
public string nom;
int age;
}

ensuite

List<CLIENT> MaListeClient = new List<CLIENT>();

où dois je déclarer :
public int age
{
get {return this._age}
set {this._age = value}
}

Merci

"Arnaud CLERET" a écrit dans le message
de news: %
En effet je parlais d'accesseur et de readonly car quand vous faites :
MaListeClient[0].age%; cela signifie que la propriété "age" de l'objet
"CLIENT" possède un accesseur de type :
public int age
{
get {return this._age}
set {this._age = value}
}
ou plus simplement :
public int age.
Dans ces deux cas l'affectation de valeur doit fonctionner.

Par contre si vous ne stipuler pas le "set" dans l'accesseur ou que vous
déclarer votre propriété avec le mot clé "readonly" ou "const", il vous
sera impossible d'y affecter une valeur telle que vous souhaitez le
faire.

--
arno - http://www.dotnetguru2.org/acleret/
"didier" a écrit dans le message de news:

DVDB a écrit :
Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de
votre code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement
typé, ce qui permet d'eviter les cast, fournit une détection des
erreurs de types à la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :


Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données d'un
ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure :
personne.nom personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent

.





Bonjour,
J'ai essayé avec List et ça ne marche pas.
Il me dit que ce n'est pas une variable.
On dirait que c'est en lecture seule ?
Y a un autre truc a faire avant ?

Merci

dans un news précédent il est question d'accesseur et de readonly ?!

encore Merci
Vincent










Avatar
Vincent
j'ai mal tappé

Voilà ce que j'ai fait :

struct CLIENT ( struct CLIENT est défini dans le namespace )
{
public int age;
}

dans ma classe TOTO:
public List<CLIENT> maliste = new List<CLIENT>();

dansune méthode de la classe TOTO :
public CLIENT monclient = new CLIENT();
monclient.age%;
maliste.add(monclient)

tout ça fonctionne. :)

dans mon main :

TOTO toto = new TOTO()
toto.monclient[0].age&; ben ca coince message d'erreur = il ne s'agit pas
d'une variable ....

j'ai tenté :
struct CLIENT ( struct CLIENT est défini dans le namespace )
{
public int age;
public Age
{
set{age=value;}
get{return age;}
}
}
ensuite
toto.monclient[0].Age&; ben ca coince idem

je débute en C# et je craque :)

"Arnaud CLERET" a écrit dans le message
de news:
La source de l'erreur est là :
- int age = private int age et non public

Dans tous les cas (et ça n'engage que moi :)), les normes de
développements et bonnes pratiques préviligient le fait :
- De toujours préciser la portée d'un membre (private, public, internal
...)
- D'écrire un accesseur pour tout membre public permettant ainsi
d'effectuer les controles nécessaire lors d'affectation d'une valeur. Par
exemple :
public int age
{
get {return this._age;}
set
{
if(value < 0) throw new ArgumentException("Valeur incompatible
!");
this._age = value;
}
}

--
arno - http://www.dotnetguru2.org/acleret/

"Vincent" a écrit dans le message de news:

Merci pour votre aide,
j'ai du mal avec la syntaxe :

si j'ai :

public struc CLIENT
{
public string nom;
int age;
}

ensuite

List<CLIENT> MaListeClient = new List<CLIENT>();

où dois je déclarer :
public int age
{
get {return this._age}
set {this._age = value}
}

Merci

"Arnaud CLERET" a écrit dans le
message de news: %
En effet je parlais d'accesseur et de readonly car quand vous faites :
MaListeClient[0].age%; cela signifie que la propriété "age" de l'objet
"CLIENT" possède un accesseur de type :
public int age
{
get {return this._age}
set {this._age = value}
}
ou plus simplement :
public int age.
Dans ces deux cas l'affectation de valeur doit fonctionner.

Par contre si vous ne stipuler pas le "set" dans l'accesseur ou que vous
déclarer votre propriété avec le mot clé "readonly" ou "const", il vous
sera impossible d'y affecter une valeur telle que vous souhaitez le
faire.

--
arno - http://www.dotnetguru2.org/acleret/
"didier" a écrit dans le message de news:

DVDB a écrit :
Si vous utilisez le framework 2.0 (VS2005 donc), et si le contexte de
votre code le permet, pourquoi ne pas utiliser la classe
System.Collections.Generic.List?

Pour faire simple, c'est la même chose que ArrayList, mais fortement
typé, ce qui permet d'eviter les cast, fournit une détection des
erreurs de types à la compilation, etc...

Pour utiliser:

List<CLIENT> MaListeClients=new List<CLIENT>();
MaListeClient.Add(new CLIENT());
MaListeClient[0].age%;

Si ça peut servir...


"Vincent" a écrit :


Bonjour,

Dans mon libre sur C#, rien n'indique comment modifier les données
d'un ArrayList. Est-ce possible ?

j'ai un ArrayList CLIENT qui contient des objets ( structure :
personne.nom personne.age ...)

Comment modifier un élément ? du style CLIENT[indice].age = 25

Merci

Vincent

.





Bonjour,
J'ai essayé avec List et ça ne marche pas.
Il me dit que ce n'est pas une variable.
On dirait que c'est en lecture seule ?
Y a un autre truc a faire avant ?

Merci

dans un news précédent il est question d'accesseur et de readonly ?!

encore Merci
Vincent














1 2