Question

Je me trouve constamment en train d'écrire un code similaire à l'exemple ci-dessous:

if (object["Object Name"] != null) {
    if (object["Object Name"] == "Some Value") {
        // Do Statement A
    } else {
        // Do Statement B
    }
} else {
    // Do Statement B
}

Le problème ici est que je vérifie beaucoup si un objet est nul ou non, puis je peux le vérifier pour son contenu réel.

" Déclaration B " est toujours le même et dans mon cas, il s’agit généralement d’une instruction SQL.

Il doit y avoir un meilleur moyen de contourner cela?

Merci
Stephen

Était-ce utile?

La solution

Il y a un court-circuit dans C # afin que vous puissiez faire:

if(null != object && object.name == foo)
  do A
else
  do B

C # évalue toujours la première expression de l'instruction conditionnelle en premier et si cela échoue, il n'essaie rien d'autre dans cette partie de l'instruction.

Pour approfondir ce point, si vous devez utiliser une opération coûteuse dans l'instruction conditionnelle avec une ou plusieurs opérations peu coûteuses, il est bon de la définir si possible à la fin. a vraiment besoin de. Donc, quelque chose comme

if(trivial comparison && trivial comparison && REALLY EXPENSIVE OPERATION)

La dernière opération ne sera plus exécutée qu'en dernier recours.

Autres conseils

Puisque C # court-circuite, oui. Essayez ceci:

if (object["Object Name"] != null && object["Object Name"] == "Some Value") 
{
    // Do Statement A
} 
else 
{
    // Do Statement B
}

Je pense que la réécriture du if-then-else à ceci le rendra plus joli en raison de la seule instruction B.

if ((object["Object Name"] != null) && (object["Object Name"] == "Some Value")) 
{
    // Do Statement A
} 
else 
{
    // Do Statement B
}

Pourquoi le double contrôle? Cela suffirait sûrement:

if(object["Object Name"] == "Some Value") {
    // Do statement A
} else {
    // Do statement B
}

Je vois en quelque sorte où vous voulez en venir avec la vérification de nullité, mais l'exemple que vous donnez n'en nécessite pas.

MODIFIER: maintenant, si vous aviez écrit this à la place:

if (object != null) {
    if (object["Object Name"] == "Some Value") {
        // Do Statement A
    } else {
        // Do Statement B
    }
} else {
    // Do Statement B
}

alors la solution serait:

if(object != null && object["Object Name"] == "Some Value") {
    // Do Statement A
} else {
    // Do Statement B
}

AVERTISSEMENT: Ne pas utiliser la méthode générale de court-circuit.

Eh bien, vous pouvez créer une fonction distincte pour effectuer la recherche, en particulier si la requête reste la même. Donc, quelque chose comme ceci: (pseudocode entrant)

private bool IsNullCheck(string objectName)
{
  if (object["Object Name"] != null)
     return false;
  else
     // statement B
}

if (!IsNullCheck("Object Name") && if(object["Object name"] == "Value") {
   // stuffs

} 
else 
{
        // Do Statement B
}

Ou similaires.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top