Indiquer qu'un string est une fonction a appelé [C#]

therainbow3 Messages postés 50 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 25 mai 2010 - 19 mai 2008 à 14:54
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008 - 20 mai 2008 à 10:47
Bonjour,

voilà j'aimerais appeler une fonction parmi 5 suivant sont indices par exemple: getImage1(), getImage2() etc.
J'ai pensé pour me simplifier les choses faire incrémenter un entier i dans un string par exemple:
        public string toString()
        {
             return "getImage"+ i +"()";
        }

et j'utilise cette fonction à l'endroit où je veux appeler cette fonction. Seulement voilà il ne comprend pas que c'est une fonction a appelé et me l'écrit comme étant un string ce qui est logique mais pas ce que je veux. ^^

Quelqu'un connaîtrait il une solution?

Merci d'avance et bonne journée.

7 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 mai 2008 à 16:25
tu peux... mais en passant par la reflexion... par contre, tu vas y perdre niveau performance.

pourquoi ne pas simplement écrire les 5 lignes ?

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
0
therainbow3 Messages postés 50 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 25 mai 2010
19 mai 2008 à 16:36
Je n'écris pas les 5 lignes simplement parce qu'en faite j'utilise une fonction que j'appelle autant de fois qu'il y a de fonction getImage() mais à chaque fois que je l'appelle il incrémente i afin d'utiliser le getImage suivant. je sais pas si je suis très claire.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
19 mai 2008 à 16:42
ok... dans ce cas, le plus simple c'est d'utilisé des delegates...

genre :

GetImageDelegate[] getImageDelegate;

getImageDelegate[0] = new getImageDelegate(getImage1());
getImageDelegate[1] = new getImageDelegate(getImage2());
getImageDelegate[2] = new getImageDelegate(getImage3());
getImageDelegate[3] = new getImageDelegate(getImage4());
getImageDelegate[4] = new getImageDelegate(getImage5());

et dans ta boucle :

for (int i =0; i<5; i++) {
   getImageDelegate[i].Invoke();
}

Sébastien FERRAND (blog)
Consultant Sénior
[Microsoft Visual C# MVP]
0
therainbow3 Messages postés 50 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 25 mai 2010
19 mai 2008 à 17:07
Ah je vais essayer je ne connais pas du tout merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
therainbow3 Messages postés 50 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 25 mai 2010
20 mai 2008 à 08:44
j'ai un petit problème il me dit qu'il y a une erreur  à ce niveau pour chaque delegate:
getImageDelegate[0] = new getImageDelegate(getImage1());
l'erreur est la suivante: Nom de Méthode attendu.
Hors getImage1() est bien une méthode dans cette classe.
0
therainbow3 Messages postés 50 Date d'inscription vendredi 14 mars 2008 Statut Membre Dernière intervention 25 mai 2010
20 mai 2008 à 09:20
J'ai résolu le problème il faut qu'on enlève les parathèses:
getImageDelegate[0] = new getImageDelegate(getImage1);

maintenant j'ai une erreur à ce niveau:

delegate string getPictureNameDelegate();

 public void AjoutPhoto(string lien)

        {

            getPictureNameDelegate[] getPictureNameDelegate;

            getPictureNameDelegate[1] = new getPictureNameDelegate(getPictureName1);

            getPictureNameDelegate[2] = new getPictureNameDelegate(getPictureName2);

            getPictureNameDelegate[3] = new getPictureNameDelegate(getPictureName3);

            getPictureNameDelegate[4] = new getPictureNameDelegate(getPictureName4);

            getPictureNameDelegate[5] = new getPictureNameDelegate(getPictureName5);

           

            for (int i = 0; i < 5; i++)

            {

                string mes = getPictureNameDelegate[i].Invoke();

                string path4 = path3 + "\" + mes;

                try

                {

                    File.Copy(lien, path4);

                    FileInfo fi = new FileInfo(path4);

                }

                catch (Exception exp)

                {

                    Console.WriteLine("Le processus a échoué", exp.ToString());

                }

            }              

     }

Il me fait utilisation d'une variable locale non assigné getPictureNameDelegate
0
Liverion Messages postés 296 Date d'inscription mardi 22 avril 2008 Statut Membre Dernière intervention 18 août 2008
20 mai 2008 à 10:47
Faudrait pas que tu commences a remplir ton tableau a l'index 0, meme si c'est avec une case vide ?

On peut écrire francais sur un clavier allemand , c'est juste plus long !!!
0
Rejoignez-nous