Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Parcourir un tableau generic

5 réponses
Avatar
Sébastien FERRAND
Bonjour à tous...

je cherche depuis un petit moment... mais là je sèche...

voici une méthode :

public virtual TDataSet SelectItem<T>(T obj) {
Type type = typeof(T);

if (type.IsArray)
{
// Parcours du tableau

}
else
{
_Parameters[0].ParameterValue = obj;
}
return Select();
}

Comment puis-je parcourir le tableau obj ?

Par exemple, j'appelle ma méthode ainsi :
SelectItem<DateTime?[]>( new DateTime?[] { date1, date2, date3 });

Merci pour votre aide.
Sébastien

--
---
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate

5 réponses

Avatar
Sébastien FERRAND
Sébastien FERRAND a couché sur son écran :
Bonjour à tous...

je cherche depuis un petit moment... mais là je sèche...

voici une méthode :

public virtual TDataSet SelectItem<T>(T obj) {
Type type = typeof(T);

if (type.IsArray)
{
// Parcours du tableau

}
else
{
_Parameters[0].ParameterValue = obj;
}
return Select();
}

Comment puis-je parcourir le tableau obj ?

Par exemple, j'appelle ma méthode ainsi :
SelectItem<DateTime?[]>( new DateTime?[] { date1, date2, date3 });

Merci pour votre aide.
Sébastien



Bon... j'ai trouvé une solution qui fonctionne... mais ce n'est pas la
plus propre, je vous la donne pour information :

public virtual TDataSet SelectItem<T>(T obj) {
Type type = typeof(T);

if (type.IsArray)
{
int i = 0;
IEnumerable t = (IEnumerable)obj;
foreach (object o in t) { // object au lieu de DateTime? :(
_Parameters[i++].ParameterValue = o;
}
}
else
{
_Parameters[0].ParameterValue = obj;
}
return Select();
}


Sébastien

--
---
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate
Avatar
Paul Bacelar
foreach (DateTime o in obj) {
_Parameters[i++].ParameterValue = o;
}
--
Paul Bacelar
MVP VC++

"Sébastien FERRAND" <listes_seb[@]vbmaf.net> wrote in message
news:
Sébastien FERRAND a couché sur son écran :
Bonjour à tous...

je cherche depuis un petit moment... mais là je sèche...

voici une méthode :

public virtual TDataSet SelectItem<T>(T obj) {
Type type = typeof(T);

if (type.IsArray)
{
// Parcours du tableau

}
else
{
_Parameters[0].ParameterValue = obj;
}
return Select();
}

Comment puis-je parcourir le tableau obj ?

Par exemple, j'appelle ma méthode ainsi :
SelectItem<DateTime?[]>( new DateTime?[] { date1, date2, date3 });

Merci pour votre aide.
Sébastien



Bon... j'ai trouvé une solution qui fonctionne... mais ce n'est pas la
plus propre, je vous la donne pour information :

public virtual TDataSet SelectItem<T>(T obj) {
Type type = typeof(T);

if (type.IsArray)
{
int i = 0;
IEnumerable t = (IEnumerable)obj;
foreach (object o in t) { // object au lieu de DateTime? :(
_Parameters[i++].ParameterValue = o;
}
}
else
{
_Parameters[0].ParameterValue = obj;
}
return Select();
}


Sébastien

--
---
Sébastien FERRAND
Microsoft Visual C# MVP
blog : http://blogs.developpeur.org/sebmafate




Avatar
Sébastien FERRAND [MVP]
Oui Paul...

mais le problème ici, c'est que c'est le type sous-jacent de T qui
m'intéresse.
Ca peut être int, long, string...

Merci
Sébastien
--
Sébastien FERRAND (MVP C#)
[http://blogs.developpeur.org/sebmafate]


"Paul Bacelar" a écrit :

foreach (DateTime o in obj) {
_Parameters[i++].ParameterValue = o;
}
--
Paul Bacelar
MVP VC++

"Sébastien FERRAND" <listes_seb[@]vbmaf.net> wrote in message
news:
> Sébastien FERRAND a couché sur son écran :
>> Bonjour à tous...
>>
>> je cherche depuis un petit moment... mais là je sèche...
>>
>> voici une méthode :
>>
>> public virtual TDataSet SelectItem<T>(T obj) {
>> Type type = typeof(T);
>>
>> if (type.IsArray)
>> {
>> // Parcours du tableau
>>
>> }
>> else
>> {
>> _Parameters[0].ParameterValue = obj;
>> }
>> return Select();
>> }
>>
>> Comment puis-je parcourir le tableau obj ?
>>
>> Par exemple, j'appelle ma méthode ainsi :
>> SelectItem<DateTime?[]>( new DateTime?[] { date1, date2, date3 });
>>
>> Merci pour votre aide.
>> Sébastien
>
> Bon... j'ai trouvé une solution qui fonctionne... mais ce n'est pas la
> plus propre, je vous la donne pour information :
>
> public virtual TDataSet SelectItem<T>(T obj) {
> Type type = typeof(T);
>
> if (type.IsArray)
> {
> int i = 0;
> IEnumerable t = (IEnumerable)obj;
> foreach (object o in t) { // object au lieu de DateTime? :(
> _Parameters[i++].ParameterValue = o;
> }
> }
> else
> {
> _Parameters[0].ParameterValue = obj;
> }
> return Select();
> }
>
>
> Sébastien
>
> --
> ---
> Sébastien FERRAND
> Microsoft Visual C# MVP
> blog : http://blogs.developpeur.org/sebmafate
>
>





Avatar
Paul Bacelar
Il y a pas de spécialisation avec les génériques C# ?
genre (je suis peut-être un peu rêveur?):

public virtual TDataSet SelectItem<T>(T obj){
_Parameters[0].ParameterValue = obj;
}

public virtual TDataSet SelectItem<T where T : IEnumerable<U> >(T obj){
foreach (U o in obj) {
_Parameters[i++].ParameterValue = o;
}
--
Paul Bacelar
MVP VC++

"Sébastien FERRAND [MVP]"
wrote in message news:
Oui Paul...

mais le problème ici, c'est que c'est le type sous-jacent de T qui
m'intéresse.
Ca peut être int, long, string...

Merci
Sébastien
--
Sébastien FERRAND (MVP C#)
[http://blogs.developpeur.org/sebmafate]


"Paul Bacelar" a écrit :

foreach (DateTime o in obj) {
_Parameters[i++].ParameterValue = o;
}
--
Paul Bacelar
MVP VC++

"Sébastien FERRAND" <listes_seb[@]vbmaf.net> wrote in message
news:
> Sébastien FERRAND a couché sur son écran :
>> Bonjour à tous...
>>
>> je cherche depuis un petit moment... mais là je sèche...
>>
>> voici une méthode :
>>
>> public virtual TDataSet SelectItem<T>(T obj) {
>> Type type = typeof(T);
>>
>> if (type.IsArray)
>> {
>> // Parcours du tableau
>>
>> }
>> else
>> {
>> _Parameters[0].ParameterValue = obj;
>> }
>> return Select();
>> }
>>
>> Comment puis-je parcourir le tableau obj ?
>>
>> Par exemple, j'appelle ma méthode ainsi :
>> SelectItem<DateTime?[]>( new DateTime?[] { date1, date2, date3 });
>>
>> Merci pour votre aide.
>> Sébastien
>
> Bon... j'ai trouvé une solution qui fonctionne... mais ce n'est pas la
> plus propre, je vous la donne pour information :
>
> public virtual TDataSet SelectItem<T>(T obj) {
> Type type = typeof(T);
>
> if (type.IsArray)
> {
> int i = 0;
> IEnumerable t = (IEnumerable)obj;
> foreach (object o in t) { // object au lieu de DateTime? :(
> _Parameters[i++].ParameterValue = o;
> }
> }
> else
> {
> _Parameters[0].ParameterValue = obj;
> }
> return Select();
> }
>
>
> Sébastien
>
> --
> ---
> Sébastien FERRAND
> Microsoft Visual C# MVP
> blog : http://blogs.developpeur.org/sebmafate
>
>







Avatar
Sébastien FERRAND [MVP]
bonne idée...
mais malheureusement, ce n'est pas possible d'écrire ceci est C# :(

la syntaxe serait éventuellement :
public virtual TDataSet SelectItem<T>(T obj) where T : IEnumerable<U> {
int i = 0;
foreach (U o in obj) {
_Parameters[i++].ParameterValue = o;
}

return Select();
}

Mais U est refusé car il doit être dans SelectItem<T, U>.

Une solution (qui fonctionne) a été proposée sur mon blog :
public virtual TDataSet SelectItem<T>(params T[] obj) {
for (int i = 0; i < obj.Length; i++) {
_Parameters[i].ParameterValue = obj[i];
}
return Select();
}


Merci pour tes idées :)

--
Sébastien FERRAND (MVP C#)
[http://blogs.developpeur.org/sebmafate]


"Paul Bacelar" a écrit :

Il y a pas de spécialisation avec les génériques C# ?
genre (je suis peut-être un peu rêveur?):

public virtual TDataSet SelectItem<T>(T obj){
_Parameters[0].ParameterValue = obj;
}

public virtual TDataSet SelectItem<T where T : IEnumerable<U> >(T obj){
foreach (U o in obj) {
_Parameters[i++].ParameterValue = o;
}
--
Paul Bacelar
MVP VC++

"Sébastien FERRAND [MVP]"
wrote in message news:
> Oui Paul...
>
> mais le problème ici, c'est que c'est le type sous-jacent de T qui
> m'intéresse.
> Ca peut être int, long, string...
>
> Merci
> Sébastien
> --
> Sébastien FERRAND (MVP C#)
> [http://blogs.developpeur.org/sebmafate]
>
>
> "Paul Bacelar" a écrit :
>
>> foreach (DateTime o in obj) {
>> _Parameters[i++].ParameterValue = o;
>> }
>> --
>> Paul Bacelar
>> MVP VC++
>>
>> "Sébastien FERRAND" <listes_seb[@]vbmaf.net> wrote in message
>> news:
>> > Sébastien FERRAND a couché sur son écran :
>> >> Bonjour à tous...
>> >>
>> >> je cherche depuis un petit moment... mais là je sèche...
>> >>
>> >> voici une méthode :
>> >>
>> >> public virtual TDataSet SelectItem<T>(T obj) {
>> >> Type type = typeof(T);
>> >>
>> >> if (type.IsArray)
>> >> {
>> >> // Parcours du tableau
>> >>
>> >> }
>> >> else
>> >> {
>> >> _Parameters[0].ParameterValue = obj;
>> >> }
>> >> return Select();
>> >> }
>> >>
>> >> Comment puis-je parcourir le tableau obj ?
>> >>
>> >> Par exemple, j'appelle ma méthode ainsi :
>> >> SelectItem<DateTime?[]>( new DateTime?[] { date1, date2, date3 });
>> >>
>> >> Merci pour votre aide.
>> >> Sébastien
>> >
>> > Bon... j'ai trouvé une solution qui fonctionne... mais ce n'est pas la
>> > plus propre, je vous la donne pour information :
>> >
>> > public virtual TDataSet SelectItem<T>(T obj) {
>> > Type type = typeof(T);
>> >
>> > if (type.IsArray)
>> > {
>> > int i = 0;
>> > IEnumerable t = (IEnumerable)obj;
>> > foreach (object o in t) { // object au lieu de DateTime? :(
>> > _Parameters[i++].ParameterValue = o;
>> > }
>> > }
>> > else
>> > {
>> > _Parameters[0].ParameterValue = obj;
>> > }
>> > return Select();
>> > }
>> >
>> >
>> > Sébastien
>> >
>> > --
>> > ---
>> > Sébastien FERRAND
>> > Microsoft Visual C# MVP
>> > blog : http://blogs.developpeur.org/sebmafate
>> >
>> >
>>
>>
>>