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

2 réponses

1 2
Avatar
Arnaud CLERET
Là j'avoue être perdu ! J'ai le même bout de code sous les yeux et tout
fonctionne très bien.

N'auriez vous pas un souci d'initialisation ? Si vous effectuez un test du
genre :

TOTO toto = new TOTO()
if(toto.monclient[0] != null) toto.monclient[0].age&;
else MessageBox.Show("Il n'y a pas d'objet CLIENT d'initialisé");

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

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

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 :)



Avatar
DVDB
C'est un problème de portée de votre variable 'monclient' qui est déclarée
publique mais au niveau d'une méthode (donc sa portée est restreinte à la
méthode dans laquelle est déclarée).

Il faut déclarer la variable 'monclient' au niveau de la classe et là vous
pourrez y accéder ou utiliser la variable 'maliste' déjà déclarée. D'après ce
que vous avez fait pour le moment, vous pourriez par exemple avoir:

dans votre main :

TOTO toto = new TOTO()
CLIENT monclient = new CLIENT();
monclient.age%;
toto.maliste.add(monclient)


puis
toto.maliste[0].age&;




"Vincent" a écrit :

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