8
votes

C # Comment puis-je vérifier si l'une des deux valeurs est vraie?

devrait être une simple question pour les experts C # ici.

Je veux essentiellement vérifier si une valeur ou une autre est vraie, un coup de feu sauvage au code est ci-dessous: P>

if ((Boolean.Parse(staff.getValue("Male")) | Boolean.Parse(staff.getValue("Female")))    
{   
   // is true
}


8 commentaires

Voulez-vous dire au moins une des valeurs est vraie, ou exactement l'une des valeurs est vraie?


Ne serait-il pas "homme ou est une femme" toujours être vraie? Sur Terre, de toute façon?


@RAY, quoi s'il existe une option transsexuelle ou "préférer ne pas répondre"?


@Ray qui n'est pas tout à fait vrai.


@Matt - je vis dans le Midwest - nous n'avons pas ces options ici


@Null - quel genre de films regardez-vous /?


Cela va descendre rapidement. De quoi parlions-nous?


@Ray voir language.home.sprynet.com/otherdex/22enuf.htm


8 Réponses :


7
votes

Utilisez le || code> (double tuyau), logique ou.

bool isMale = Boolean.Parse(staff.getValue("Male");
bool isFemale = Boolean.Parse(staff.getValue("Female");
if (isMale || isFemale) // note double pipe ||
{
   // do something if true
}


0 commentaires

9
votes

On dirait que vous recherchez le logique ou.

if(condition1 || condition2)
{
}


6 commentaires

Le code donné dans la question utilise déjà un du logique ou des opérateurs - | - bien que je conviens qu'il est presque toujours préférable d'utiliser le court-circuit || version à la place.


@Lukeh | n'est pas logique ou opérateur. C'est un boeuf ou un opérateur.


@Markos: pas en C #. Pour Type Boolean , opérateur | est un opérateur logique ou non court-circuit.


@Markos: à partir des documents MSDN: "pour bool opérandes, | calcule le logique ou de ses opérandes" msdn.microsoft.com/en-us/library/kxszd0kx.aspx


@Gorpik Bien entendu, l'opération binaire sur un bit est en fait une opération logique non courtise.


@Markos: Mais il arrive que, dans C #, cet opérateur est spécifiquement défini comme un opérateur logique non court-circuitting, comme expliqué dans le lien de Lukeh. C'est une question de concept. Donc, votre premier commentaire est faux.



4
votes

Le conditionnel ou l'opérateur || est ce dont vous avez besoin xxx

si la première condition est true , puis la seconde condition n'est pas 'T vérifié depuis que le résultat va évidemment retourner vrai .


2 commentaires

L'opérateur | , tel qu'utilisé par le code exemple de la question, est également logique ou opérateur, bien que je conviens qu'il est presque toujours préférable d'utiliser le court-circuit || Version à la place.


Mon mauvais - Je l'ai édité à «conditionnel» car c'est comme ça que je l'ai vu être appelé.



-3
votes

Un peu de vérification d'exception est nécessaire de toute façon. La méthode Boolean.Parse () Obtient une chaîne comme argument et retourne soit true ou false Si l'argument, une fois extrait de WhitSpace, est égal à "vrai" ou "fausse" (capitalisation de la note). Dans tout autre cas, la fonction renvoie une exception.

supposant que les valeurs possibles de staff.gevalue ("mâle") et staff.gevalue ("femelle") sont exactement ces deux, puis la simple disjonction ( || ) suffit. Si TOUT Autre valeur de retour est possible, y compris null et la chaîne vide, vous devez vérifier les exceptions xxx

ou comparer manuellement xxx


4 commentaires

Selon MSDN Boolean.Parse, c'est insensible à la casse. Et ce serait un bon endroit pour utiliser Boolean.Tryparse au lieu de boolean.parse pour éviter de faire la manipulation des exceptions.


Qu'est-ce que Boolean.True et même si c'était valide, quelle est la vertu de la comparer à nouveau à un booléen? Cela pourrait continuer à être: = boolean.true == staff.getvalue ("féminin") == true == true == vrai ..... == vrai . À quoi ça sert?


Vous n'êtes pas "Vérification des exceptions". Vous êtes "avaler des exceptions et rendre les gens qui hériter de votre code déchirent leurs cheveux." C'est exactement ce que ne pas faire avec des exceptions; Si l'analyse des booléens peut échouer, utilisez tryparse () comme phil agneau suggéré. Si la recherche d'une valeur de retour NULL veut dire que vous affecterez False à Ismale ou à Isfemale, utilisez simplement l'opérateur null-coalescing, "??". msdn.microsoft.com/en-us/library/ms173224.aspx. I.e. ismale = staff.gevalue () ?? faux;


Phil: Complètement d'accord !!!! Michael: TYPO, c'était censé être: ismale = boolean.truestring == staff.getvalue ("mâle") et non ismale = boolean.true == Staff.gevalue (" ") . Jloubert: plutôt Boolean.Parse (Staff.getvalue () ?? Boolean.falestring) (ou avec Tryparse).



18
votes

Si exactement, il faut être vrai, il s'agit de: xxx


0 commentaires

0
votes

Pour indiquer si un sexe est spécifié avec une valeur de "true" plutôt que "false", xxx

. Valeurs L'objet Personnel est.

Donc, au cas où cette question est littérale et non un exemple abstrait, ...

mâle ou femme .. tout le monde est l'un ou l'autre. Peut-être dans votre question que vous vouliez demander lequel des deux est le cas? Dans ce cas, xxx

ou simplement, xxx


0 commentaires

2
votes

Notez que tryparse fonctionne plus rapidement et plus sûr, alors juste parse car ne jette pas une exception en cas d'erreur. tryparse renvoie BOOL qui indique était d'analyser le succès ou non.

de sorte que les deux méthodes d'analyse devraient renvoyer true et seulement après cela - faire le chèque principal < Pré> xxx

ou xxx


0 commentaires

0
votes

Ceci est un scénario similaire, mais je vérifie trois valeurs de bool ou plus.

Thread th = new Thread(() =>
                {
                    while (true)
                    {
                        bool allReadComplete = true;

                        foreach (IDataProvider provider in lstDataProviders)
                        {
                            provider.StartReading();

                            if (provider.FinishedReading)
                              allReadComplete = allReadComplete && provider.FinishedReading;
                            else
                              allReadComplete = provider.FinishedReading;
                        }

                        // to induce some context switching
                        Thread.Sleep(0);

                        if (allReadComplete)
                            break;
                    }

                    Console.WriteLine("Thread Exiting");

                });
            th.IsBackground = true;
            th.Start();


0 commentaires