سؤال

أنا دائما أجد نفسي في كتابة التعليمات البرمجية مشابهة كما في المثال أدناه:

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

المشكلة هنا هي أنني كثيرا التحقق إذا كان كائن باطل أو لا ثم لا يمكن التحقق من ذلك على انها المحتويات الفعلية.

"بيان ب" هو نفسه دائما و في حالتي هو عادة عبارة SQL.

يجب أن يكون هناك طريقة أفضل حول هذا ؟

شكرا
ستيفن

هل كانت مفيدة؟

المحلول

وهناك الدائرة القصيرة في C # لذلك يمكنك القيام به:

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

وC # دائما يقيم أول التعبير في بيان مشروط أولا وإذا فشل ذلك، فإنه لا يحاول أي شيء آخر في ذلك الجزء من البيان.

لمزيد من هذه النقطة، إذا كنت ستكون لدينا عملية مكلفة في بيان الشرطية جنبا إلى جنب مع واحد أو أكثر غير مكلفة العمليات، انها جيدة لوضعها في النهاية، اذا كان ذلك ممكنا، لذلك سوف تحقق سوى عملية مكلفة عندما يحتاج فعلا الى. ذلك شيء من هذا القبيل

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

وسيكون الآن فقط تنفيذ العملية مكلفة كملاذ أخير.

نصائح أخرى

ومنذ C # يفعل الدائرة القصيرة، نعم. جرب هذا:

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

وأعتقد أن إعادة كتابة إذا، ثم، آخر لهذا جعلها تبدو أجمل بسبب B-بيان واحد.

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

لماذا التحقق ؟ بالتأكيد هذا سيكون كافيا:

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

أنا أرى نوعا من ما كنت تحصل في المقابل التحقق ، ولكن المثال تعطي لا تتطلب ذلك.

تحرير: الآن إذا كنت قد كتبت هذا بدلا من ذلك:

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

ثم سيكون الحل:

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

وشروط: عدم القيام طريقة ماس كهربائى العام

حسنا، أنت يمكن أن تخلق وظيفة منفصلة لأداء البحث، وخاصة إذا كان لا يزال الاستعلام نفسه. ذلك شيء من هذا القبيل: (شبة الكود واردة)

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
}

وأو ما شابه ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top