L'elemento falso in un'operazione logica

1

Desidero sapere se c'è un modo per sapere qual è l'elemnet di un'operazione logica falsa?
Esempio.

if( String.IsNullOrEmpty(obj1) || (String.IsNullOrEmpty(obj2) )
   throw("..............."); 

Come posso indovinare quale di questi è quello vuoto?

    
posta hello B 11.03.2012 - 01:11
fonte

3 risposte

3

Non puoi sapere quale delle sottoespressioni è vuota, a meno che non ripeta i controlli.

In alternativa, puoi separare il codice precedente in due istruzioni if separate, duplicando la parte throw("...") .

    
risposta data 11.03.2012 - 01:34
fonte
3

Non puoi saperlo nel tuo codice. Ma puoi semplicemente creare due variabili, che contengono le parti della condizione e quindi controllare quale di esse è true (almeno una di esse sarà) e quale false (al massimo una di esse).

bool isObj1Empty = String.IsNullOrEmpty(obj1);
bool isObj2Empty = String.IsNullOrEmpty(obj2);
if (isObj1Empty || isObj2Empty)
   throw("...............");
    
risposta data 11.03.2012 - 01:52
fonte
1

Questo appartiene quasi a CodeReview. Ecco come affronterei questo in modo abbastanza pulito, senza controllare le cose due volte:

public void DoSomething(string obj1, string obj2)
{
    CheckStrArgNotEmpty(name: "obj1", value: obj1);
    CheckStrArgNotEmpty(name: "obj2", value: obj2);

    // Optionally:
    obj1 = obj1.Trim(); // obj1, obj2 are bad names btw
    obj2 = obj2.Trim();

    // The rest of the code ...
}

private static CheckStrArgNotEmpty(string argName, string value)
{
    if (!String.IsNullOrWhitespace(value)) // or IsNullOrEmpty ?
    {
        return;
    }

    string exceptionMessage = String.Format(
        "Argument named '{0}' is null or empty but it should not have been."
        argName);
    throw new ArgumentException(message: exceptionMessage);
}
    
risposta data 11.03.2012 - 06:22
fonte

Leggi altre domande sui tag