2010-03-04 5 views
0

Dans le code suivant, je reçois l'avertissement suivant:Problèmes d'utilisation délégués

La variable « Résultat » est attribué, mais sa valeur est jamais utilisé

bool Result; 

     base.ExecuteTest(delegate(Selenium.ISelenium sel1) 
     { 
      return Result = false; 

     }); 

En outre, dans le code suivant:

for (int i = 0; i <= ClientSiteCnt;) 
     { 
      return (Result = testcaseDel.Invoke()); 
     } 

La signature du délégué est

public delegate bool TestCaseDelegate(Selenium.ISelenium sel); 

Comment ajouter le paramètre (le paramètre du délégué) dans la méthode .Invoke()?

+2

Honnêtement, votre code n'a aucun sens pour moi. Pourquoi attribuez-vous une valeur à Result, puis renvoyez-la? Si quelque chose je m'attendrais à des effets secondaires horribles, en utilisant et assignant une variable en dehors du délégué. Qu'essayez-vous d'accomplir ici? – Sam

+0

Pourriez-vous élaborer sur les effets secondaires? Cela semble quelque chose que je ne sais vraiment pas. – dotnetdev

+0

Pourquoi auriez-vous une boucle for qui se termine toujours par la première itération? –

Répondre

0

Vous obtenez ce message car vous affectez uniquement une valeur à Résultat, mais ne l'utilisez jamais.

Ce que le compilateur essaie de vous dire est: Pourquoi déclarez-vous le résultat, lui assignez des valeurs, mais ne l'utilisez jamais?

Puisque vous utilisez jamais Résultat, vos exemples de code fonctionnent exactement de la même lorsque vous utilisez:

base.ExecuteTest(delegate(Selenium.ISelenium sel1) 
    { 
     return false; 
    }); 

et

// for (int i = 0; i <= ClientSiteCnt;) 
    // { 
     return testcaseDel.Invoke(); 
    // } 
+0

Merci pour cette réponse. Oui, c'est un bien meilleur exemple et je vais comme vous l'avez écrit. Une idée sur la deuxième partie de mon message? – dotnetdev

+0

Je pense que Space Cracker a répondu à ça pour moi. – GvS

1

ajouter au sujet de paramètre à la méthode Invoke
vous simplement écrire comme

TestCaseDelegate testCaseDelegate =new TestCaseDelegate([method Name]); 
testCaseDelegate .Invoke([parameter of type Selenium.ISelenium]);