【问题标题】:Assign string value for decimal value为十进制值分配字符串值
【发布时间】:2018-01-25 07:50:03
【问题描述】:
_item = new OutTYonetimOzet();

_item.Banka = Convert.ToDecimal(" "); 

liste.Add(_item);

有一个名为liste 的列表。在列表项Banka 中,命名元素是十进制值。我想在屏幕上显示空字符串时显示它。但是此代码出现无法转换的错误。有什么问题。

错误信息是:

输入字符串的格式不正确。

【问题讨论】:

  • 那么想要decimal 值你希望它解析到吗?听起来您可能想使用Nullable<decimal>
  • 您确定可以将空字符串转换为十进制吗? :o

标签: c# type-conversion variable-assignment


【解决方案1】:

没有“空白小数”这样的东西。 decimal 不能有一个“空白”的值 - 它总是有一个数值。 Convert.ToDecimal(" ") 是荒谬的 - 它可以返回任何有意义的东西。

也许你可以尝试使用Nullable<decimal>(又名decimal?);即

public decimal? Banka {get;set;}

_item.Banka = null;

【讨论】:

  • _item.Banka = Nullable;在给定的评论中是无效的。
  • 你需要改变_item的实现,所以Banka的类型是Nullable<decimal>
  • @Marc 完全正确...以防它不够明显 ;)
【解决方案2】:

您也可以使用decimal.TryParse 代替Convert。使用这种技术,您可以检查字符串是否有效。

        _item = new OutTYonetimOzet();

        decimal val = decimal.MinValue;

        if (decimal.TryParse(" ", out val))
        {
            _item.Banka = val;
        }
        else
        {
            //your default goes here
            _item.Banka = 0;
        }

        liste.Add(_item);

正如 Mark 建议的那样,我将使用 Nullable<decimal> 并使用 null 作为默认值。

【讨论】:

  • 这将是一些随机输入字符串的正确解决方案,而不是硬编码空间。它仍然会在需要“空白”的地方显示0
  • 这就是为什么我添加了评论“你的默认设置在这里”并且应该使用可为空的。顺便说一句,我假设 OP 发布了一个 minimal reproducible example 所以空白不是硬编码的......
  • _item.Banka = Nullable;在给定的评论中是无效的。 @Mat
猜你喜欢
  • 2012-02-03
  • 1970-01-01
  • 1970-01-01
  • 2020-03-14
  • 2020-06-20
  • 2018-01-22
  • 2017-08-07
  • 1970-01-01
  • 2019-07-27
相关资源
最近更新 更多