8

ここでは、C# の専門家にとっては簡単な質問です。

基本的に、いずれかの値が TRUE であるかどうかを確認したいのですが、コードでのワイルド スタブは以下のとおりです。

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

これは正しいです?

ありがとう

4

8 に答える 8

18

EXACTLY ONE が true の場合、次のようになります。

var male = bool.Parse(staff.getValue("Male"));
var female = bool.Parse(staff.getValue("Female"));

if (male ^ female)    
{
   //is true
}
于 2010-08-18T23:21:00.690 に答える
9

論理 OR を探しているようです。

if(condition1 || condition2)
{
}
于 2010-08-18T22:49:27.127 に答える
7

||(二重パイプ)、論理 ORを使用します。

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

C# ステートメントでは、式は左から右に評価されます。OR 演算では、最初の式が true の場合、2 番目の式は評価されません。

于 2010-08-18T22:48:52.530 に答える
4

条件付き OR 演算子||が必要です

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

最初の条件が の場合TRUE、結果が明らかに を返すため、2 番目の条件はチェックされませんTRUE

于 2010-08-18T22:51:05.190 に答える
2

エラーが発生した場合に例外をスローしないという理由TryParseだけで、より高速で安全に動作することに注意してください。解析が成功したか失敗したかを示す bool を返します。ParseTryParse

したがって、両方の解析メソッドが返さtrueれ、その後にのみメインチェックを実行する必要があります

bool male, female;
if ((Boolean.TryParse(staff.getValue("Male"), out male) && 
     Boolean.TryParse(staff.getValue("Female"), out female)) &&
    (male || female)) // or ^
{
    // do stuff
}

また

bool male, female;
if (Boolean.TryParse(staff.getValue("Male"), out male) &&
     Boolean.TryParse(staff.getValue("Female"), out female))        
{
    if(male) { }
    else if (female) { } // or just else
}
else
{
     // staff contains wrong data. Probably "yeap" instead of "true"
}
于 2010-08-19T08:16:41.700 に答える
0

これは同様のシナリオですが、3 つ以上の bool 値をチェックしています。

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();
于 2012-10-09T14:32:05.407 に答える
0

性別が「false」ではなく「true」の値で指定されているかどうかを示すには、

bool genderIsSpecified = staff.getValue("Male") | staff.getValue("Female");

.. オブジェクトがこれらの値のどれであるかではなく、それらの値の 1 つであるかどうかのみを判断しますstaff

したがって、念のため、この質問は文字通りであり、抽象的な例ではありません...

男性または女性..誰もがどちらか一方です。おそらく、あなたの質問では、どちらが当てはまるかを尋ねるつもりでしたか? その場合、

bool defaultGenderIfNoGenderDocumented = true; // male
bool MaleIfTrue_FemaleIfFalse = !string.IsNullOrEmpty(staff.getValue("Male"))
    ? bool.Parse(staff.getValue("Male"))
    : string.IsNullOrEmpty(staff.getValue("Female"))
        ? bool.Parse(staff.getValue("Female"))
            ? false
            : defaultGenderIfNoGenderDocumented
        : defaultGenderIfNoGenderDocumented;

または単に、

// assume value is properly populated, ignore "Female" value
bool isMale = bool.Parse(staff.getValue("Male")); 
于 2010-08-19T08:06:44.510 に答える
-3

とにかく、少しの例外チェックが必要です。Boolean.Parse() メソッドは引数として文字列を取得し、空白を取り除いた引数が「True」または「False」に等しい場合にのみ、trueまたはそのいずれかを返します (大文字化に注意してください)。それ以外の場合、関数は例外を返します。false

と の可能な値がまさにこの 2 つであると仮定すると、単純な論理和 ( staff.getValue("Male"))で十分です。および空の文字列を含む他の戻り値が可能な場合は、例外を確認する必要ありますstaff.getValue("Female")||null

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

または手動で比較する

bool isMale = Boolean.TrueValue == staff.getValue("Male");
bool isFemale = Boolean.TrueValue == staff.getValue("Female");
if (isMale || isFemale) // note double pipe ||
{
    // do something if true
}
于 2010-08-18T23:11:40.900 に答える