سؤال

أحاول كتابة طريقة التقسيم، والتي تقبل 2 المعلمات.

public static decimal Divide(decimal divisor, decimal dividend)
{
    return dividend / divisor;
}

الآن، إذا DASVisor 0، فإننا لا نستطيع تقسيم خطأ صفر، وهو ما يرام.

ما أود فعله هو التحقق مما إذا كان المقسوم 0 وإذا كان كذلك، تحويله إلى 1. هل هناك طريقة للقيام بذلك مع وجود الكثير من البيانات في طريقتي؟ أعتقد أن الكثير من IF () S يجعل الفوضى. أعرف رياضيا لا ينبغي أن يتم ذلك، لكن لدي وظيفة أخرى لهذا الغرض.

علي سبيل المثال:

if(divisor == 0)
{
    divisor = 1;
}
return dividend / divisor;

هل يمكن القيام به بدون if() بيان؟

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

المحلول

يمكنك القيام بشرط إذا كان بيان مثل هذا. هذا هو نفسه IIF في VB.NET

return dividend / ((divisor == 0) ? 1 : divisor);

تأكد من أن تفاف الشوط الثاني () أو ستحصل على خطأ تقسيم.

نصائح أخرى

باستخدام ?: المشغل أو العامل

return (divisor == 0) ? dividend : dividend / divisor 

هذا هو نفسه إلى حد كبير مثل بيان IF، لكنه نظيف.

return dividend / divisor == 0 ? 1 : divisor;

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

ومع ذلك، لا أعتقد أنها ستكون فكرة جيدة، لأنها ستضيف بعض الوقت في وقت التشغيل؛ مع الاستفادة الوحيدة التي تحصل عليها بعض التعليمات البرمجية التي تبدو منظف قليلا.

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