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

Signaler
Messages postés
50
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
25 mai 2010
-
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008
-
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

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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]
Messages postés
50
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
25 mai 2010

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.
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
36
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]
Messages postés
50
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
25 mai 2010

Ah je vais essayer je ne connais pas du tout merci.
Messages postés
50
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
25 mai 2010

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.
Messages postés
50
Date d'inscription
vendredi 14 mars 2008
Statut
Membre
Dernière intervention
25 mai 2010

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
Messages postés
296
Date d'inscription
mardi 22 avril 2008
Statut
Membre
Dernière intervention
18 août 2008

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 !!!