Question existancielle sur tout ce qui implémente IList...
7 réponses
MrChris
Salut !
Comment faire de manière propre pour modifier un élément d'un arraylist
en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2):
Public Class Personne
Public Nom as string
Public Prenom as String
End Class
Puis une collection de personnes
Dim PersonneS as new arraylist
PersonneS.add(Personne1)
PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne
For each TmpPers as Personne in Personnes
If TmpPers = PersonneQueJeCherche then
PersAModifier = TmpPers
End If
Next
Personnes.remove(PersAModifier)
PersAModifier.Nom = MaModif
Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!!
Une solution ?
Pourquoi pas utiliser une collection ? Moi je fais :
' ================== Public Class Personne Public ID As Integer Public Nom As String End Class
Public Class Personnes Inherits System.Collections.CollectionBase
Public Sub Add(ByVal UnePersonne As Personne) MyBase.List.Add(UnePersonne) End Sub
Public ReadOnly Property Item(ByVal Index As Integer) As Personne Get Return CType(MyBase.List.Item(Index), Personne) End Get End Property End Class '================== Ensuite, je fais :
Dim UnePersonne As New Personnes
AllPersonnes.Item(0).Nom = "GATES Bill"
en tout cas, vivement VS2005 avec les Generics...
A plus Olivier
"MrChris" a écrit dans le message de news:
Salut !
Comment faire de manière propre pour modifier un élément d'un arraylist en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2): Public Class Personne Public Nom as string Public Prenom as String End Class
Puis une collection de personnes Dim PersonneS as new arraylist PersonneS.add(Personne1) PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne For each TmpPers as Personne in Personnes If TmpPers = PersonneQueJeCherche then PersAModifier = TmpPers End If Next Personnes.remove(PersAModifier) PersAModifier.Nom = MaModif Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!! Une solution ?
Merci MrChris
Pourquoi pas utiliser une collection ?
Moi je fais :
' ================== Public Class Personne
Public ID As Integer
Public Nom As String
End Class
Public Class Personnes
Inherits System.Collections.CollectionBase
Public Sub Add(ByVal UnePersonne As Personne)
MyBase.List.Add(UnePersonne)
End Sub
Public ReadOnly Property Item(ByVal Index As Integer) As Personne
Get
Return CType(MyBase.List.Item(Index), Personne)
End Get
End Property
End Class
'==================
Ensuite, je fais :
Dim UnePersonne As New Personnes
AllPersonnes.Item(0).Nom = "GATES Bill"
en tout cas, vivement VS2005 avec les Generics...
A plus
Olivier
"MrChris" <mrchris@spam.com> a écrit dans le message de
news:uqCfwVPZEHA.228@TK2MSFTNGP10.phx.gbl...
Salut !
Comment faire de manière propre pour modifier un élément d'un arraylist
en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2):
Public Class Personne
Public Nom as string
Public Prenom as String
End Class
Puis une collection de personnes
Dim PersonneS as new arraylist
PersonneS.add(Personne1)
PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne
For each TmpPers as Personne in Personnes
If TmpPers = PersonneQueJeCherche then
PersAModifier = TmpPers
End If
Next
Personnes.remove(PersAModifier)
PersAModifier.Nom = MaModif
Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!!
Une solution ?
Pourquoi pas utiliser une collection ? Moi je fais :
' ================== Public Class Personne Public ID As Integer Public Nom As String End Class
Public Class Personnes Inherits System.Collections.CollectionBase
Public Sub Add(ByVal UnePersonne As Personne) MyBase.List.Add(UnePersonne) End Sub
Public ReadOnly Property Item(ByVal Index As Integer) As Personne Get Return CType(MyBase.List.Item(Index), Personne) End Get End Property End Class '================== Ensuite, je fais :
Dim UnePersonne As New Personnes
AllPersonnes.Item(0).Nom = "GATES Bill"
en tout cas, vivement VS2005 avec les Generics...
A plus Olivier
"MrChris" a écrit dans le message de news:
Salut !
Comment faire de manière propre pour modifier un élément d'un arraylist en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2): Public Class Personne Public Nom as string Public Prenom as String End Class
Puis une collection de personnes Dim PersonneS as new arraylist PersonneS.add(Personne1) PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne For each TmpPers as Personne in Personnes If TmpPers = PersonneQueJeCherche then PersAModifier = TmpPers End If Next Personnes.remove(PersAModifier) PersAModifier.Nom = MaModif Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!! Une solution ?
Merci MrChris
Zazar
Bonjour;
Comment faire de manière propre pour modifier un élément d'un arraylist en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2): Public Class Personne Public Nom as string Public Prenom as String End Class
Puis une collection de personnes Dim PersonneS as new arraylist PersonneS.add(Personne1) PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne For each TmpPers as Personne in Personnes If TmpPers = PersonneQueJeCherche then PersAModifier = TmpPers End If Next Personnes.remove(PersAModifier) PersAModifier.Nom = MaModif Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!! Une solution ?
Oui, il suffit de faire : PersonneQueJeCherche.Nom = MaModif
Les variables que vous utilisez sont des réfèrences vers vos objets (à condition que ceux-ci soient des classes et non des structures ou des types primitifs). Si vous avez 2 variables qui sont deux réfèrences vers le même objet, alors toute modification par une des 2 variables sera répercutée sur l'autre. Un IList n'étant qu'une liste de réfèrence, le comportement est le même. Suis-je clair ?
-- Zazar
Bonjour;
Comment faire de manière propre pour modifier un élément d'un arraylist
en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2):
Public Class Personne
Public Nom as string
Public Prenom as String
End Class
Puis une collection de personnes
Dim PersonneS as new arraylist
PersonneS.add(Personne1)
PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne
For each TmpPers as Personne in Personnes
If TmpPers = PersonneQueJeCherche then
PersAModifier = TmpPers
End If
Next
Personnes.remove(PersAModifier)
PersAModifier.Nom = MaModif
Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!!
Une solution ?
Oui, il suffit de faire :
PersonneQueJeCherche.Nom = MaModif
Les variables que vous utilisez sont des réfèrences vers vos objets (à
condition que ceux-ci soient des classes et non des structures ou des types
primitifs). Si vous avez 2 variables qui sont deux réfèrences vers le même
objet, alors toute modification par une des 2 variables sera répercutée sur
l'autre. Un IList n'étant qu'une liste de réfèrence, le comportement est le
même.
Suis-je clair ?
Comment faire de manière propre pour modifier un élément d'un arraylist en parcourant par un for each ???
Imaginons une classe Personne (et deux instances Personne1 et Personne2): Public Class Personne Public Nom as string Public Prenom as String End Class
Puis une collection de personnes Dim PersonneS as new arraylist PersonneS.add(Personne1) PersonneS.add(Personne2)
Comment faire pour modifier une personne dans Personnes ???
Je procède de la manière suivante :
Dim PersAModifier as Personne For each TmpPers as Personne in Personnes If TmpPers = PersonneQueJeCherche then PersAModifier = TmpPers End If Next Personnes.remove(PersAModifier) PersAModifier.Nom = MaModif Personnes.add(PersAModifier)
C'est une usine à gaz, je pense qu'il y a plus simple !!! Une solution ?
Oui, il suffit de faire : PersonneQueJeCherche.Nom = MaModif
Les variables que vous utilisez sont des réfèrences vers vos objets (à condition que ceux-ci soient des classes et non des structures ou des types primitifs). Si vous avez 2 variables qui sont deux réfèrences vers le même objet, alors toute modification par une des 2 variables sera répercutée sur l'autre. Un IList n'étant qu'une liste de réfèrence, le comportement est le même. Suis-je clair ?
-- Zazar
Ambassadeur Kosh
dériver de collectionBase, c'est le plus cool. prend ce bout de code xml par exemple
utilise le template xsl dessus. ça va te generer une classe fortement typée qui va répondre à ton probleme. le foreach(Dog dog in myPinguinCollection) te jettera des la compilation.
<xsl:template match="collection"> [Serializable()] public class <xsl:value-of select="@type"/>Collection : CollectionBase { public <xsl:value-of select="@type"/>Collection() {
}
public <xsl:value-of select="@type"/> this[int index] { get { return ((<xsl:value-of select="@type"/>)(List[index])); } set { List[index] = value; } }
public int Add(<xsl:value-of select="@type"/> value) { return List.Add(value); }
public bool Contains(<xsl:value-of select="@type"/> value) { return List.Contains(value); }
public void CopyTo(<xsl:value-of select="@type"/>[] array, int index) { List.CopyTo(array, index); }
public int IndexOf(<xsl:value-of select="@type"/> value) { return List.IndexOf(value); }
utilise le template xsl dessus. ça va te generer une classe fortement typée
qui va répondre à ton probleme.
le foreach(Dog dog in myPinguinCollection) te jettera des la compilation.
<xsl:template match="collection">
[Serializable()]
public class <xsl:value-of select="@type"/>Collection : CollectionBase
{
public <xsl:value-of select="@type"/>Collection()
{
}
public <xsl:value-of select="@type"/> this[int index]
{
get { return ((<xsl:value-of select="@type"/>)(List[index])); }
set { List[index] = value; }
}
public int Add(<xsl:value-of select="@type"/> value)
{
return List.Add(value);
}
public bool Contains(<xsl:value-of select="@type"/> value)
{
return List.Contains(value);
}
public void CopyTo(<xsl:value-of select="@type"/>[] array, int index)
{
List.CopyTo(array, index);
}
public int IndexOf(<xsl:value-of select="@type"/> value)
{
return List.IndexOf(value);
}
utilise le template xsl dessus. ça va te generer une classe fortement typée qui va répondre à ton probleme. le foreach(Dog dog in myPinguinCollection) te jettera des la compilation.
<xsl:template match="collection"> [Serializable()] public class <xsl:value-of select="@type"/>Collection : CollectionBase { public <xsl:value-of select="@type"/>Collection() {
}
public <xsl:value-of select="@type"/> this[int index] { get { return ((<xsl:value-of select="@type"/>)(List[index])); } set { List[index] = value; } }
public int Add(<xsl:value-of select="@type"/> value) { return List.Add(value); }
public bool Contains(<xsl:value-of select="@type"/> value) { return List.Contains(value); }
public void CopyTo(<xsl:value-of select="@type"/>[] array, int index) { List.CopyTo(array, index); }
public int IndexOf(<xsl:value-of select="@type"/> value) { return List.IndexOf(value); }
Merci, c'est ce que je fait !!!! Sauf que personne est une structure !!! Comme le dit Zazar, mon problème viendrais de la !
Merci beaucoup !!! @+MrChris
MrChris
> Les variables que vous utilisez sont des réfèrences vers vos objets (à condition que ceux-ci soient des classes et non des structures ou des
types
primitifs).
Hé, hé ! Tu es trop fort !!! dans mon exemple, j'ai utilisé la classe personne, (habitude) alors que dans mon prog c'est une structure !!! Bravo (c'etait pour voir si vous suivez :*)) ) !
Bon, c'est cool ! c'est vraiment le genre d'erreur que j'aurais eu du mal à trouver tout seul.
Merci beaucoup !!! MrChris
> Les variables que vous utilisez sont des réfèrences vers vos objets (à
condition que ceux-ci soient des classes et non des structures ou des
types
primitifs).
Hé, hé !
Tu es trop fort !!! dans mon exemple, j'ai utilisé la classe personne,
(habitude)
alors que dans mon prog c'est une structure !!!
Bravo (c'etait pour voir si vous suivez :*)) ) !
Bon, c'est cool ! c'est vraiment le genre d'erreur que j'aurais eu du mal à
trouver tout seul.
> Les variables que vous utilisez sont des réfèrences vers vos objets (à condition que ceux-ci soient des classes et non des structures ou des
types
primitifs).
Hé, hé ! Tu es trop fort !!! dans mon exemple, j'ai utilisé la classe personne, (habitude) alors que dans mon prog c'est une structure !!! Bravo (c'etait pour voir si vous suivez :*)) ) !
Bon, c'est cool ! c'est vraiment le genre d'erreur que j'aurais eu du mal à trouver tout seul.