ฉันจะแก้ไข DivideByZeroException.dll ได้อย่างไร

ฉันใช้เฟรมเวิร์ก DevExpress XAF

ฉันมีคลาสที่มีแอตทริบิวต์ Persistent Alias จำนวนมากที่สามารถคำนวณคุณสมบัติบางอย่างได้ นี่คือตัวอย่างรหัสของฉัน:

[PersistentAlias("ShortTermDebt + LongTermDebt / EquityTotal")]
public decimal DebtEquity
{
    get
    {
        return decimal.Parse(EvaluateAlias("DebtEquity").ToString());
    }
}

ฉันได้ลองตั้งค่าคุณสมบัติเป็น = 1

return DebtEquity = 1;

แต่ทั้งหมดนี้เป็นการรีเซ็ตคุณสมบัติเป็น 1 เมื่อบันทึก

ฉันได้ลองตั้งค่าเริ่มต้นใน SQL Server สำหรับแต่ละคุณสมบัติเป็น 1 แต่ก็ไม่ได้ผลเช่นกัน

โดยพื้นฐานแล้ว ฉันมี Detailview ที่มีการคำนวณมากมาย และเมื่อฉันต้องการสร้างมุมมองรายละเอียดใหม่ ฉันจะได้รับ DivideByZeroException เนื่องจากแน่นอนว่ามุมมองรายละเอียดใหม่/วัตถุจะไม่มีค่าใดๆ มีความคิดเห็นใดบ้างที่ฉันจะหลีกเลี่ยงปัญหานี้ได้อย่างไร


person EB.    schedule 03.02.2015    source แหล่งที่มา
comment
ฉันคิดว่าคุณจะต้องมีวงเล็บในการบวกหนี้ระยะสั้นและระยะยาว ไม่เช่นนั้นจะประเมิน LongTermDebt / EquityTotal ก่อน แล้วจึงบวก ShortTermDebt   -  person Rufus L    schedule 04.02.2015


คำตอบ (2)


หากคุณสามารถรับค่า EquityTotal ได้ คุณสามารถตรวจสอบเป็นศูนย์ก่อน ไม่เช่นนั้นคุณอาจตรวจพบข้อยกเว้นได้

ตัวอย่างที่มีค่าตรวจสอบก่อน:

[PersistentAlias("ShortTermDebt + LongTermDebt / EquityTotal")]
public decimal DebtEquity
{
    get
    {
        if (EquityTotal == 0) return 0;  // return 0 or whatever number you want when EquityTotal is equal to zero
        return decimal.Parse(EvaluateAlias("DebtEquity").ToString());
    }
}

ตัวอย่างที่มีข้อยกเว้นการจับ:

[PersistentAlias("ShortTermDebt + LongTermDebt / EquityTotal")]
public decimal DebtEquity
{
    get
    {
        try
        {
            return decimal.Parse(EvaluateAlias("DebtEquity").ToString());
        }
        catch (DivideByZeroException)
        {
            return 0;  // return 0 or whatever number you want when EquityTotal is equal to zero
        }
    }
}
person Aalawlx    schedule 03.02.2015
comment
ฉันอยากจะแนะนำให้ไม่จับข้อยกเว้น การหลีกเลี่ยงข้อยกเว้นที่สามารถหลีกเลี่ยงได้ยังดีกว่าการจัดการกับมันมาก - person Eric Lippert; 04.02.2015

อีกทางเลือกหนึ่งที่ใช้ไวยากรณ์ภาษาเกณฑ์ล้วนๆ คุณสามารถใช้:

[PersistentAlias("Iif(EquityTotal > 0,ShortTermDebt+LongTermDebt/EquityTotal, 0)")]
public decimal DebtEquity
{
    get => Convert.ToDecimal(EvaluateAlias(nameof(DebtEquity)))
}
person Oliver    schedule 23.01.2021