【问题标题】:Cannot implicitly convert type 'string' to 'decimal'无法将类型“字符串”隐式转换为“十进制”
【发布时间】:2015-07-24 12:12:17
【问题描述】:
private void button18_Click(object sender, EventArgs e)
    {
        Form1 stForm = new Form1();
        DialogResult result = stForm.ShowDialog(this);

        if (result == DialogResult.Cancel)
            return;
        Inscrierea__pentru_burs_sau_contract media = new Inscrierea__pentru_burs_sau_contract();
        media.Media_MNDP = stForm.MNDP.Text;
        media.Media_MNEA = stForm.MNEA.Text;
        media.Media_Concurs = stForm.MediaConcurs.Text;

        db.Media.Add(media);
        db.SaveChanges();
        MessageBox.Show("Salvarea a avut loc cu succes!!!");
    }

请帮我解决我的错误:

  1. media.Media_MNDP = stForm.MNDP.Text;
  2. media.Media_MNEA = stForm.MNEA.Text;
  3. media.Media_Concurs = stForm.MediaConcurs.Text;

error" 无法将类型 'string' 隐式转换为 'decimal'"

【问题讨论】:

  • 不确定它是否只是为了演示目的,如果没有被告知你不应该有名为'form1'之类的类

标签: c# visual-studio


【解决方案1】:

这样试试

 media.Media_MNDP = Decimal.Parse(stForm.MNDP.Text);

对于会抛出错误的空文本框。

为了避免错误,试试这个

decimal demo;

if(Decimal.TryParse(stForm.MNDP.Text,out demo)){
  media.Media_MNDP = Decimal.Parse(stForm.MNDP.Text);
}

【讨论】:

【解决方案2】:

利用Decimal.TryParse(string, out val)

例子:

decimal val;
if(Decimal.TryParse(stForm.MNDP.Text, out val))
    media.Media_MNDP = val;

最好使用 tryparse 方法,因为它可以避免抛出运行时异常

【讨论】:

  • 是的,我总是会使用它,尤其是在处理用户界面时。
【解决方案3】:

使用 Parse 时添加 try-catch

try{
media.Media_MNDP = Decimal.Parse(stForm.MNDP.Text);
media.Media_MNEA = Decimal.Parse(stForm.MNEA.Text);
media.Media_Concurs = Decimal.Parse(stForm.MediaConcurs.Text);
}
catch(Exception ex){
}

【讨论】:

  • 不正确。不好的用法。使用 TryParse。此时在您的代码中,其中任何一个都可以抛出异常......但是哪个?您将无法在运行时弄清楚。
  • 类似但不一样。 Tryparse 带走了您编写的臃肿代码。为什么要重新发明轮子?
  • 问题是“将类型'字符串'转换为'十进制'”。我的解决方案有效
  • @ANguyen 仅仅因为解决方案有效并不意味着它是解决该解决方案的好方法。
  • 第一条评论是“不正确的”。怎么不正确?它可能不是最好的,但它不是错误的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-09
  • 2014-05-15
  • 2014-02-04
  • 2011-05-28
  • 1970-01-01
相关资源
最近更新 更多