Sto utilizzando l'operatore ??
per provare e assegnare un oggetto in base alla corrispondenza migliore trovata in un elenco.Catturare quale elemento della mano sinistra nell'operatore a coalescenza nulla ha assegnato correttamente la variabile
ho vari regole di corrispondenza, ma hanno semplificato questo per l'esempio:
objectImTryingToSet =
MyListOfPotentialMatches.FirstOrDefault(*/lamda checking numerous things*/) ?? //rule1
MyListOfPotentialMatches.FirstOrDefault(*/lamda checking different numerous things*/) ?? //rule2
MyListOfPotentialMatches.FirstOrDefault(*/lamda checking again different numerous things*/); //rule3
Per scopi di debug, vorrei memorizzare una registrazione stringa, che regola era quella che assegnata con successo objectImTryingToSet
come ho un bug in cui in uno scenario l'oggetto viene assegnato quando non dovrebbe essere ed è un vero mal di testa che tenta manualmente di setacciare tutte queste regole per scoprire dove si trova l'assegnazione errata.
Così ho praticamente vuole, pseudo:
string ruleThatMatched = null;
objectImTryingToSet =
MyListOfPotentialMatches.FirstOrDefault(*/lamda checking numerous things*/) ?? if (objectImTryingToSet != null) { ruleThatMatched = "rule1" } //rule1
MyListOfPotentialMatches.FirstOrDefault(*/lamda checking different numerous things*/) ?? if (objectImTryingToSet != null) { ruleThatMatched = "rule2" } //rule2
MyListOfPotentialMatches.FirstOrDefault(*/lamda checking again different numerous things*/); if (objectImTryingToSet != null) { ruleThatMatched = "rule3"} //rule3
//tried all the rules and still no match
if (objectImTryingToSet == null)
{
ruleThatMatched = "no rule managed to find a match";
}
Questo è anche possibile utilizzare l'operatore ??
?
Perché non si utilizza un 'se ... else'? –
quando si utilizza l'operatore ternario o a coalescenza nulla e si inizia a complicare la procedura, è molto meglio passare a un/se/o interruttore. – Jonesopolis
"Dottore, fa male quando faccio * questo *!" "Smettila." ... Scusa, non ho potuto resistere. :) –