Je dois manipuler une classe qui implements icomparer
Mais je ne sais pas comment cela fonctionne
Quelqu'un pourrait-il me donner un lien
(en fait, dans janus.gridex, je dois donner un objet icomparer a une colonne
pour que quand je groupe sur cette colonne, cela ne se fasse que sur les
deux premiers caractères)
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Ambassadeur Kosh
un IComparer permet de comparer deux objets (un ordre)
int Compare(object x, object y);
resultat < 0 |- x < y resultat == 0 |- x equal y resultat > 0 |- x > y
il y'a plein de façon d'établir un ordre. il y'a celui sur les entiers, sur les nombres, sur les chaine, celui sur les lignes d'une table (ou on compare un champ, puis un autre)...
par contre, si tu as besoin d'une comparaison qui te dit "==" ou "!=", il est plus que recommandé d'utiliser IEqualityComparer
si tu peux utiliser les versions generic IComparer<T> ou IEqualityComparer<T>, c'est carrement bien.
enfin, dans le comparateur, il y'a toujours le cas chiant ou on a un des deux champs qui n'est pas du même type que l'autre, ou qui est null... inferieur ? superieur ? egal ? renvoyer une exception ? eh ben ça dépend de ce qu'on attend.
voici une implantation classique (reflector sur Comparer). le pb de types est rejeté sur IComparable, c'est domage, mais c'est un exemple
public int Compare(object a, object b) { if (a == b) { return 0; } if (a == null) { return -1; } if (b == null) { return 1; } if (this.m_compareInfo != null) { string text1 = a as string; string text2 = b as string; if ((text1 != null) && (text2 != null)) { return this.m_compareInfo.Compare(text1, text2); } } IComparable comparable1 = a as IComparable; if (comparable1 == null) { throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable")); } return comparable1.CompareTo(b); }
donc, typiquement, ton comparateur va recevoir deux zones de texte, et toi, tu vas simplement faire un SubString des deux premiers caracteres de chacune, et retourner le CompareTo puisque ce sont deux chaines. (attention à la culture si ça a un impact)
un IComparer permet de comparer deux objets (un ordre)
int Compare(object x, object y);
resultat < 0 |- x < y
resultat == 0 |- x equal y
resultat > 0 |- x > y
il y'a plein de façon d'établir un ordre. il y'a celui sur les entiers, sur
les nombres, sur les chaine, celui sur les lignes d'une table (ou on compare
un champ, puis un autre)...
par contre, si tu as besoin d'une comparaison qui te dit "==" ou "!=", il
est plus que recommandé d'utiliser IEqualityComparer
si tu peux utiliser les versions generic IComparer<T> ou
IEqualityComparer<T>, c'est carrement bien.
enfin, dans le comparateur, il y'a toujours le cas chiant ou on a un des
deux champs qui n'est pas du même type que l'autre, ou qui est null...
inferieur ? superieur ? egal ? renvoyer une exception ?
eh ben ça dépend de ce qu'on attend.
voici une implantation classique (reflector sur Comparer). le pb de types
est rejeté sur IComparable, c'est domage, mais c'est un exemple
public int Compare(object a, object b)
{
if (a == b)
{
return 0;
}
if (a == null)
{
return -1;
}
if (b == null)
{
return 1;
}
if (this.m_compareInfo != null)
{
string text1 = a as string;
string text2 = b as string;
if ((text1 != null) && (text2 != null))
{
return this.m_compareInfo.Compare(text1, text2);
}
}
IComparable comparable1 = a as IComparable;
if (comparable1 == null)
{
throw new
ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable"));
}
return comparable1.CompareTo(b);
}
donc, typiquement, ton comparateur va recevoir deux zones de texte, et toi,
tu vas simplement faire un SubString des deux premiers caracteres de
chacune, et retourner le CompareTo puisque ce sont deux chaines. (attention
à la culture si ça a un impact)
un IComparer permet de comparer deux objets (un ordre)
int Compare(object x, object y);
resultat < 0 |- x < y resultat == 0 |- x equal y resultat > 0 |- x > y
il y'a plein de façon d'établir un ordre. il y'a celui sur les entiers, sur les nombres, sur les chaine, celui sur les lignes d'une table (ou on compare un champ, puis un autre)...
par contre, si tu as besoin d'une comparaison qui te dit "==" ou "!=", il est plus que recommandé d'utiliser IEqualityComparer
si tu peux utiliser les versions generic IComparer<T> ou IEqualityComparer<T>, c'est carrement bien.
enfin, dans le comparateur, il y'a toujours le cas chiant ou on a un des deux champs qui n'est pas du même type que l'autre, ou qui est null... inferieur ? superieur ? egal ? renvoyer une exception ? eh ben ça dépend de ce qu'on attend.
voici une implantation classique (reflector sur Comparer). le pb de types est rejeté sur IComparable, c'est domage, mais c'est un exemple
public int Compare(object a, object b) { if (a == b) { return 0; } if (a == null) { return -1; } if (b == null) { return 1; } if (this.m_compareInfo != null) { string text1 = a as string; string text2 = b as string; if ((text1 != null) && (text2 != null)) { return this.m_compareInfo.Compare(text1, text2); } } IComparable comparable1 = a as IComparable; if (comparable1 == null) { throw new ArgumentException(Environment.GetResourceString("Argument_ImplementIComparable")); } return comparable1.CompareTo(b); }
donc, typiquement, ton comparateur va recevoir deux zones de texte, et toi, tu vas simplement faire un SubString des deux premiers caracteres de chacune, et retourner le CompareTo puisque ce sont deux chaines. (attention à la culture si ça a un impact)
Omega
Tu crée une class qui implémente Icomparer Public Class test
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
End Function
End Class
Puis tu implemente la fonction Compare. Cette fonction sera appelé pour comparer chaque element 2 à 2 donc si tu as tu texte dans ta colonne, x et y sont de type texte, tu n'a plus qu'a faire leur comparaison. Voila un exemple pour 2 objet de type Numeric If (x< y)Then
return = -1
ElseIf (x > y)Then
return = 1
Else
return = 0
End If
--
"Sylo" <devbnet@[antispam]free.fr> a écrit dans le message de news:
Je dois manipuler une classe qui implements icomparer Mais je ne sais pas comment cela fonctionne Quelqu'un pourrait-il me donner un lien
(en fait, dans janus.gridex, je dois donner un objet icomparer a une
colonne
pour que quand je groupe sur cette colonne, cela ne se fasse que sur les deux premiers caractères)
MErci Sylvain
Tu crée une class qui implémente Icomparer
Public Class test
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer
Implements System.Collections.IComparer.Compare
End Function
End Class
Puis tu implemente la fonction Compare. Cette fonction sera appelé pour
comparer chaque element 2 à 2
donc si tu as tu texte dans ta colonne, x et y sont de type texte, tu n'a
plus qu'a faire leur comparaison.
Voila un exemple pour 2 objet de type Numeric
If (x< y)Then
return = -1
ElseIf (x > y)Then
return = 1
Else
return = 0
End If
--
"Sylo" <devbnet@[antispam]free.fr> a écrit dans le message de
news:OHQNmRU8FHA.1292@tk2msftngp13.phx.gbl...
Je dois manipuler une classe qui implements icomparer
Mais je ne sais pas comment cela fonctionne
Quelqu'un pourrait-il me donner un lien
(en fait, dans janus.gridex, je dois donner un objet icomparer a une
colonne
pour que quand je groupe sur cette colonne, cela ne se fasse que sur les
deux premiers caractères)
Tu crée une class qui implémente Icomparer Public Class test
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
End Function
End Class
Puis tu implemente la fonction Compare. Cette fonction sera appelé pour comparer chaque element 2 à 2 donc si tu as tu texte dans ta colonne, x et y sont de type texte, tu n'a plus qu'a faire leur comparaison. Voila un exemple pour 2 objet de type Numeric If (x< y)Then
return = -1
ElseIf (x > y)Then
return = 1
Else
return = 0
End If
--
"Sylo" <devbnet@[antispam]free.fr> a écrit dans le message de news:
Je dois manipuler une classe qui implements icomparer Mais je ne sais pas comment cela fonctionne Quelqu'un pourrait-il me donner un lien
(en fait, dans janus.gridex, je dois donner un objet icomparer a une
colonne
pour que quand je groupe sur cette colonne, cela ne se fasse que sur les deux premiers caractères)