【问题标题】:How to convert textbox value to integer如何将文本框值转换为整数
【发布时间】:2015-04-13 13:48:01
【问题描述】:

我的 C# windows 窗体应用程序中有一些文本框。我想做以下事情:

inRed = Convert.ToInt32(tbRed.Text.ToString().Length < 0 ? tbRed.Text = "0" : tbRed.Text);
inGreen = Convert.ToInt32(tbGreen.Text.ToString().Length < 0 ? tbGreen.Text = "0" : tbGreen.Text);
inBlue = Convert.ToInt32(tbBlue.Text.ToString().Length < 0 ? tbBlue.Text = "0" : tbBlue.Text);

inCyan = Convert.ToInt32(tbCyan.Text.ToString().Length < 0 ? tbCyan.Text = "0" : tbCyan.Text);
inMagenta = Convert.ToInt32(tbMagenta.Text.ToString().Length < 0 ? tbMagenta.Text = "0" : tbMagenta.Text);

如果文本框没有值,输入0并转换为整数,否则将文本框的值转换为整数。

inCyan 出现以下错误,其中文本框为空:

Input string was not in a correct format.

我怎样才能实现我想要的?

【问题讨论】:

  • 尝试使用Length &lt;= 0 而不仅仅是Length &lt; 0
  • 为什么要将 ToString 添加到字符串属性中?
  • @DavidG Wow... 缺少=。谢谢。
  • 要输入数值,您可以使用NumericUpDown 控件。它完全消除了解析。
  • @juharr 实际上我不会使用这种方法,因为如果输入非数值,它仍然会产生异常。

标签: c# winforms


【解决方案1】:

使用Int32.TryParse 代替Convert.ToInt32。这会为您提供有关它是否为有效整数的反馈。例如

String textboxValue = "1";
Int32 i;
if (!String.IsNullOrWhitespace(textboxValue) && // Not empty
    Int32.TryParse(textboxValue, out i)) { // Valid integer
  // The textbox had a valid integer. i=1
} else {
  // The texbox had a bogus value. i=default(Int32)=0
  // You can also specify a different fallback value here.
}

作为后续,String.IsNullOrWhitespace 可以很容易地解读是否提供了值,但(取决于您的 .NET 版本)可能不可用(并且您可能只有 String.IsNullOrEmpty。

如果需要,polyfill 的行长如下:

Boolean SringIsNullOrWhitespace(String input)
{
    return !String.IsNullOrEmpty(input) && input.Trim().Length > 0;
}

另外,如果您发现自己经常尝试执行此解析,您可以将其重构为帮助程序类:

public static class ConvertUtil
{
    public Int32 ToInt32(this String value)
    {
        return ToInt32(value, default(Int32));
    }
    public Int32 ToInt32(this String value, Int32 defaultValue)
    {
#if NET4
        if (!String.IsNullOrWhiteSpace(value))
#else
        if (!String.IsNullOrEmpty(value) && value.Trim().Length > 0)
#endif
        {
            Int32 i;
            if (Int32.TryParse(value, out i))
            {
                return i;
            }
        }
        return defaultValue;
    }
}

// explicit
inRed = ConvertUtil.ToInt32(tbRed.Text, 0/* defaultValue*/);
// As extension
inRed = tbRed.Text.ToInt32(0/* defaultValue*/);

【讨论】:

    【解决方案2】:

    你可以这样做

    // Initialise variable with 0
    int value;
    
    // Try parse it, if it's successful and able to parse then value is set to         the int equivalent of your text input
    int.TryParse(inputVariable, out value);
    
    return value
    

    这是处理您的问题的一种简单方法 - 请注意,如果解析失败,则它会返回 0 值。

    您将如何将其应用于您的特定问题。

    int inMagenta;
    int.TryParse(tbMagenta, out inMagenta);
    
    etc.....
    

    【讨论】:

    • out参数需要使用"out"
    【解决方案3】:

    你可以使用tryparse。

    int inRed;  //default value will be 0 , if the string is not in a  valid form
    Int32.TryParse(tbRed.Text.ToString(), out inRed);
    

    【讨论】:

    • 只是为OP添加一些信息,如果转换不成功,TryParse将返回值0。 More info here on MSDN
    • 不,TryParse 返回一个布尔值。正确的检查方法是if(TryParse(...))。
    • @DionV。是的,它在 out 参数中提供 Int 输出和布尔值的转换状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多