Bagaimana cara memperbaiki DivideByZeroException

Saya menggunakan Kerangka DevExpress XAF.

Saya memiliki Kelas dengan banyak Persistent Alias Atribut yang menghitung propertinya. Berikut ini contoh kode saya:

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

Saya telah mencoba mengatur Properti ke = 1

return DebtEquity = 1;

Tapi yang dilakukan hanyalah mengatur ulang properti menjadi 1 saat menabung.

Saya telah mencoba mengatur Nilai Default di SQL Server untuk setiap properti menjadi 1. Tapi ini juga tidak berhasil.

Pada dasarnya, saya memiliki Tampilan Detail yang memiliki banyak perhitungan di dalamnya. Dan ketika saya ingin membuat Tampilan Detail BARU, saya mendapatkan DivideByZeroException karena tentu saja Tampilan Detail/Objek BARU tidak akan memiliki nilai apa pun. Adakah ide bagaimana saya bisa menyiasatinya?


person EB.    schedule 03.02.2015    source sumber
comment
Saya rasa Anda memerlukan tanda kurung seputar penambahan utang jangka pendek dan jangka panjang, jika tidak maka akan mengevaluasi LongTermDebt / EquityTotal terlebih dahulu, lalu menambahkan ShortTermDebt.   -  person Rufus L    schedule 04.02.2015


Jawaban (2)


Jika Anda bisa mendapatkan nilai EquityTotal maka Anda dapat memeriksanya nol terlebih dahulu, jika tidak, Anda dapat menangkap pengecualiannya.

Contoh dengan nilai cek terlebih dahulu:

[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());
    }
}

Contoh dengan pengecualian tangkapan:

[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
Saya akan merekomendasikan untuk tidak menangkap pengecualian. Jauh lebih baik menghindari pengecualian yang dapat dihindari daripada menanganinya. - person Eric Lippert; 04.02.2015

Sebagai alternatif menggunakan sintaks bahasa kriteria murni, Anda dapat menggunakan:

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