2010-02-23 6 views
2

Je reçois une erreur lors de l'attribution d'une valeur.Erreur lors de l'affectation d'une valeur booléenne

Mon code est:

protected bool ValidateProfile() 
    { 
     bool blnFirstName = false; 
     bool blnLastName = false; 
     bool blnEMail = false; 

     //(error on line below: "The left-hand side of an assignment must be a variable, property or indexer") 
     ValidateProfile() = false; 


    if txtFName != "" 
     blnFName = true; 

    if txtLName != "" 
     blnLName = true; 

    if txtEMail != "" 
     blnEMail = true; 

    if (blnFName) && (blnLName) && (blnEMail)) 
    ValidateProfile = true; 

    } 

Comment attribuer une valeur booléenne à ValidateProfile?

Merci

+0

Programmeur VB ou FORTRAN. –

+0

@ John Saunders - Les programmeurs VB sont les bienvenus ici comme tout le monde. C'est une question légitime. – Nick

+0

Comme d'autres l'ont dit, vous voulez utiliser 'return false' pour cela, mais au cas où vous ne le saviez pas et ce n'est pas évident,' return' vous renverra immédiatement de la fonction ... juste quelque chose à savoir de. – Beska

Répondre

2

Comme d'autres l'ont souligné, en C# vous utilisez return au lieu de MyFunction = x. Dans ce scénario, vous pouvez affecter le résultat de votre chèque final à un booléen et le retourner:

bool retVal = (blnFName) && (blnLName) && (blnEMail); 
return retVal; 

Alternativement, vous pouvez simplement ignorer l'affectation au total:

return (blnFName) && (blnLName) && (blnEMail); 

EDIT: Je remarque que vous en utilisant la notation hongroise, ce qui implique que txtFName est un TextBox. Gardez à l'esprit que C# n'a pas de propriétés par défaut comme VB. S'il s'agit d'un TextBox, il ne sera jamais égal à "", car il n'est pas de type System.String. Je devine que vouloir réellement évaluer txtFName.Text

+0

Merci pour l'info, Jeremy. Cela rendrait le code facile. – user279521

+0

L'utilisation d'un bool séparé pour chaque champ et && ing n'est pas une bonne pratique. – Nate

+0

@Jeremy: oui, j'évalue txtFName.Text – user279521

3

Vous ne pouvez pas affecter une valeur à une fonction. Vous avez besoin return false;

7

Vous voulez

return false; 

En C#, nous affecter de valeurs au nom de la fonction pour retourner une valeur.


Si vous souhaitez définir la valeur de retour à un moment différent de lorsque vous revenez de la méthode, alors vous devriez faire quelque chose comme ceci:

bool retVal; // Defaults to false 

if (condition) 
    retVal = true; 

if (otherCondition) 
    retVal = false; 

if (thirdCondition) 
    retVal = true; 

return retVal; 
+1

+1 J'ai oublié c'est une vieille chose VB ... –

+0

John, j'ai besoin d'utiliser l'expression (si ValidateProfile puis le faire) dans d'autres endroits dans l'application. Comment puis-je faire cela en utilisant un RetVal? – user279521

+0

if (ValidateProfile()) {/ * puis * /} – Dykam

2

Vous voulez return false


Bon, en prenant le code affiché:

protected bool ValidateProfile() 
{ 
     return !String.IsNullOrEmpty(txtFName) && !String.IsNullOrEmpty(txtLName) && !String.IsNullOrEmpty(txtEMail); 
} 

Ou

protected bool ValidateProfile() 
{ 
    bool returnValue = true; 

    if(String.IsNullOrEmpty(txtFName)) 
    { 
     returnValue=false; 
    } 
    else if(String.IsNullOrEmpty(txtLName)) 
    { 
     returnValue = false; 
    } 
    else if(String.IsNullOrEmpty(txtEMail)) 
    { 
     returnValue = false; 
    } 

    return returnValue; 

} 

Bien que vous pouvez simplement revenir faux dès que vous trouvez un champ non valide.

2

Modifier cette dernière ligne à:

return false; 

Bien qu'il semble que vous êtes toujours faux retour ici. Y a-t-il une option pour retourner vrai?

+0

oui, j'ai modifié mon bloc de code ci-dessus; le bloc de code vérifie si l'utilisateur a entré des valeurs, puis définit ValidateProfile = true. – user279521

+0

Génial. Vous devez utiliser "return" plus une valeur du type du type de valeur de retour de la méthode lorsque vous renvoyez une valeur d'une méthode en C#. –

+0

Pouvez-vous poster un exmaple, plz? – user279521

2

Juste une note de côté en plus de tous les retours ...

Vous pouvez modifier ceci:

si txtFName = ""

! Pour vérifier si String.IsEmptyOrNull (txtFName.Texte)

Ou au moins initialiser vos variables soit null ou String.Empty.

Juste un FYI si.

+0

Merci JonH. Je n'ai pas réalisé cela. – user279521

0

Pas un programmeur C#, mais tu ne peux pas juste écrire:

return (txtFName != "") && (txtLName != "") && (txtEMail != ""); 

pour le corps de la fonction?

+2

Dans C#, vous devez utiliser String.IsNullOrEmpty (variable) – Nate

+0

Merci Nate. Est-ce que C# évalue une chaîne NULL à false? Que diriez-vous d'une chaîne vide? –

+0

En C#, une chaîne n'a aucune conversion implicite en booléen. Si vous l'essayez, vous obtiendrez une erreur. Vous devez utiliser une sorte de fonction sur la chaîne qui retournera un booléen, comme dans votre réponse, ou la réponse de @ Nate. – Beska

Questions connexes