当字符串为空时,将字符串值替换为“0”

6

我从文本框中获取一个值并将其转换为十进制。但是,文本框的值可能为空。那么,我该如何处理来自文本框的空字符串?

不幸的是,我需要处理大约50个文本框,所以像“使用IF条件检查null”这样的答案对我没有帮助。如果我使用所有这些IF条件,我的代码将变得丑陋。

我有以下代码:

Convert.ToDecimal(txtSample.Text)

为了处理空值,我做了这个:
Convert.ToDecimal(txtSample.Text = string.IsNullOrEmpty(txtSample.Text) ? "0" : txtSample.Text)

然而,上面的代码在文本框中显示为“0”。用户不想看到“0”。另一个解决方案是将文本框值存入变量中,并像下面这样进行转换。

string variable = txtSample.Text;
Convert.ToDecimal(variable = string.IsNullOrEmpty(variable) ? "0" : variable)

但是,我不想定义约50个变量。我正在寻找一些处理转换期间空值的代码片段,而无需添加额外的代码行。


这是什么类型的应用程序?WPF?ASPNET?我问这个问题是因为WPF应用程序有值转换器,使得这个过程非常容易。 - Tacoman667
点赞以抵消一个错误的-1(?)。不知道为什么人们还会没有理由地给帖子打负分...来吧,伙计们... - code4life
3个回答

18
但是,上面的代码在文本框中显示“0”。用户不想看到“0”。原因是您的语句将新值分配给了txtSample.Text(当您执行txtSample.Text = ...时)。只需删除赋值语句即可。
Convert.ToDecimal(string.IsNullOrEmpty(txtSample.Text) ? "0" : txtSample.Text)

为了方便处理多个文本字段,您可以定义一个扩展方法:

public static string ZeroIfEmpty(this string s)
{
    return string.IsNullOrEmpty(s) ? "0" : s;
}

然后像这样使用:

Convert.ToDecimal(txtSample.Text.ZeroIfEmpty())

哈哈,读了你的回答后,我感觉自己像个白痴。为什么我一开始要给文本框赋值呢?当问题显而易见时,为什么我没有想到删除这个赋值呢?我为什么要花两个小时来解决这个问题呢?哈哈,我想我的编程大脑已经关闭了,我用其他部分的大脑在思考。:) 。不管怎样,谢谢你啊。 - ARB

2
你可以创建一个函数来避免在多个地方复制代码。
decimal GetTextboxValue(string textboxText)
{
    return Convert.ToDecimal(string.IsNullOrEmpty(textboxText) ? "0" : textboxText);
}

然后像这样使用它:

GetTextboxValue(txtSample.Text);

不错的,伙计。我会做这个的。但是我不能将其标记为答案,因为我已经将另一个答案标记为答案了。 - ARB
1
好的答案。请将您的回答中的(variable)替换为(textboxText)。 - Raj Baral

0
你可以为字符串创建以下扩展方法。
        public static decimal ToDecimal(this string strValue)
        {
            decimal d;
            if (decimal.TryParse(strValue, out d))
                return d;
            return 0;
        }

那么你可以在每个地方都使用 txtSample.Text.ToDecimal()。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接