【问题标题】:How can I convert String to Int?如何将 String 转换为 Int?
【发布时间】:2010-11-04 10:09:12
【问题描述】:

我有一个TextBoxD1.Text,我想将其转换为int 以将其存储在数据库中。

我该怎么做?

【问题讨论】:

  • 使用 Convert.ToInt32() 有什么特别的缺点

标签: c# .net string int type-conversion


【解决方案1】:

虽然我同意使用TryParse 方法,但很多人不喜欢使用out 参数(包括我自己)。在 C# 中添加了元组支持后,另一种方法是创建一个扩展方法,将您使用 out 的次数限制为单个实例:

public static class StringExtensions
{
    public static (int result, bool canParse) TryParse(this string s)
    {
        int res;
        var valid = int.TryParse(s, out res);
        return (result: res, canParse: valid);
    }
}

(来源:C# how to convert a string to int

【讨论】:

    【解决方案2】:

    如果您知道字符串是整数,请执行以下操作:

    int value = int.Parse(TextBoxD1.Text);
    

    如果您不知道字符串是整数,请使用TryParse 安全地进行操作。

    C# 7.0 中,您可以使用inline variable declaration

    • 如果解析成功 - value = 它的解析值。
    • 如果解析失败 - 值 = 0。

    代码:

    if (int.TryParse(TextBoxD1.Text, out int value))
    {
        // Parse succeed
    }
    

    缺点:

    您无法区分 0 值和未解析的值。

    【讨论】:

      【解决方案3】:

      这是通过扩展方法执行此操作的版本,如果转换失败,该方法还可以设置默认值。事实上,这就是我用来将字符串输入转换为任何可转换类型的方法:

      using System;
      using System.ComponentModel;
      
      public static class StringExtensions
      {
          public static TOutput AsOrDefault<TOutput>(this string input, TOutput defaultValue = default)
              where TOutput : IConvertible
          {
              TOutput output = defaultValue;
      
              try
              {
                  var converter = TypeDescriptor.GetConverter(typeof(TOutput));
                  if (converter != null)
                  {
                      output = (TOutput)converter.ConvertFromString(input);
                  }
              }
              catch { }
      
              return output;
          }
      }
      

      对于我的使用,我将输出限制为可转换类型之一:https://docs.microsoft.com/en-us/dotnet/api/system.iconvertible?view=net-5.0。例如,我不需要疯狂的逻辑来将字符串转换为类。

      使用它将字符串转换为int:

      using FluentAssertions;
      using Xunit;
      
      [Theory]
      [InlineData("0", 0)]
      [InlineData("1", 1)]
      [InlineData("123", 123)]
      [InlineData("-123", -123)]
      public void ValidStringWithNoDefaultValue_ReturnsExpectedResult(string input, int expectedResult)
      {
          var result = input.AsOrDefault<int>();
      
          result.Should().Be(expectedResult);
      }
      
      [Theory]
      [InlineData("0", 999, 0)]
      [InlineData("1", 999, 1)]
      [InlineData("123", 999, 123)]
      [InlineData("-123", -999, -123)]
      public void ValidStringWithDefaultValue_ReturnsExpectedResult(string input, int defaultValue, int expectedResult)
      {
          var result = input.AsOrDefault(defaultValue);
      
          result.Should().Be(expectedResult);
      }
      
      [Theory]
      [InlineData("")]
      [InlineData(" ")]
      [InlineData("abc")]
      public void InvalidStringWithNoDefaultValue_ReturnsIntegerDefault(string input)
      {
          var result = input.AsOrDefault<int>();
      
          result.Should().Be(default(int));
      }
      
      [Theory]
      [InlineData("", 0)]
      [InlineData(" ", 1)]
      [InlineData("abc", 234)]
      public void InvalidStringWithDefaultValue_ReturnsDefaultValue(string input, int defaultValue)
      {
          var result = input.AsOrDefault(defaultValue);
      
          result.Should().Be(defaultValue);
      }
      

      【讨论】:

        【解决方案4】:
        using System;
        class HelloWorld {
        static void Main()
        {
         int experience = 0;
         Console.WriteLine("How many years of experience do you have?");
         var years = Console.ReadLine();
         Int32.TryParse(years, out experience);
         if (experience == 0)
             Console.WriteLine("Inexperienced");
        else if (experience == 1)
             Console.WriteLine("Junior");
        else if (experience == 2)
             Console.WriteLine("Intermediate");
        else if (experience == 3)
             Console.WriteLine("Advanced");
        else
             Console.WriteLine("Senior");
           }
        }
        

        【讨论】:

          猜你喜欢
          • 2012-11-22
          • 2011-05-29
          • 2011-11-19
          • 2011-12-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多