以三元表达式转换委托的例外情况

时间:2014-05-16 21:51:46

标签: c# .net casting delegates ternary-operator

我有这个片段:

public delegate decimal CalculerMoyenneGenerale(decimal a, decimal b);
        Func<decimal, decimal, decimal, decimal> fonc1 = (a, b, c) => (a + b * 2 + c * 2) / 5;
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {

            decimal moyenne1 = decimal.Parse(moy1.Text);
            decimal moyenne2 = decimal.Parse(moy2.Text);
            decimal moyenne3 = decimal.Parse(moy3.Text);
            decimal moyenneBac = decimal.Parse(moybac.Text);
            CalculerMoyenneGenerale calcul;
            decimal moyenneAnnee = fonc1.Invoke(moyenne1, moyenne2, moyenne3);
            calcul = (moyenneAnnee < moyenneBac) ? CalculerSansVightcinq : CalculerAvecVightcinq;
          General.Text = calcul(moyenneAnnee, moyenneBac).ToString();

        }

        public decimal CalculerSansVightcinq(decimal annee, decimal bac)
        {
            return bac;
        }

        public decimal CalculerAvecVightcinq(decimal annee, decimal bac)
        {
            return (bac * 75  + annee * 25 ) / 100;
        }

我在这一行有一个问题:

 calcul = (moyenneAnnee < moyenneBac) ? CalculerSansVightcinq : CalculerAvecVightcinq;

它没有接受这个三元表达式(铸造除外)。如果我通过ìf else语句更改此表达式,则可以正常工作。

  1. 为什么会出现这种例外的原因?
  2. 我该如何解决?

1 个答案:

答案 0 :(得分:-1)

使用calcul = (moyenneAnnee < moyenneBac) ? (CalculerMoyenneGenerale)CalculerSansVightcinq : CalculerAvecVightcinq;