我有一个TextBoxD1.Text,我想将其转换为int,并将其存储在数据库中。
我该怎么做?
我有一个TextBoxD1.Text,我想将其转换为int,并将其存储在数据库中。
我该怎么做?
当前回答
虽然这里已经有很多描述int.Parse的解决方案,但所有答案中都缺少一些重要的内容。通常,数值的字符串表示因区域性而异。数字字符串的元素,如货币符号、组(或千)分隔符和小数分隔符,都因文化而异。
如果您想创建一种将字符串解析为整数的健壮方法,那么考虑区域性信息非常重要。如果没有,将使用当前的区域性设置。这可能会给用户一个非常可怕的惊喜——甚至更糟糕的是,如果你正在解析文件格式。如果您只想进行英语解析,最好通过指定要使用的区域性设置,使其明确:
var culture = CultureInfo.GetCulture("en-US");
int result = 0;
if (int.TryParse(myString, NumberStyles.Integer, culture, out result))
{
// use result...
}
有关更多信息,请阅读CultureInfo,特别是MSDN上的NumberFormatInfo。
其他回答
您也可以使用扩展方法,这样它会更可读(尽管每个人都已经习惯了常规的Parse函数)。
public static class StringExtensions
{
/// <summary>
/// Converts a string to int.
/// </summary>
/// <param name="value">The string to convert.</param>
/// <returns>The converted integer.</returns>
public static int ParseToInt32(this string value)
{
return int.Parse(value);
}
/// <summary>
/// Checks whether the value is integer.
/// </summary>
/// <param name="value">The string to check.</param>
/// <param name="result">The out int parameter.</param>
/// <returns>true if the value is an integer; otherwise, false.</returns>
public static bool TryParseToInt32(this string value, out int result)
{
return int.TryParse(value, out result);
}
}
然后你可以这样称呼它:
如果您确定字符串是整数,如“50”。int num=TextBoxD1.Text.ParseToInt32();如果您不确定并希望防止崩溃。整数;if(TextBoxD1.Text.TryParseToInt32(out num)){//解析成功,num具有解析的值。}
为了使其更动态,以便您也可以将其解析为double、float等,您可以创建一个通用扩展。
虽然我同意使用TryParse方法,但很多人不喜欢使用out参数(包括我自己)。在C#中添加了元组支持后,另一种方法是创建一个扩展方法,该方法将限制您使用单个实例的次数:
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#如何将字符串转换为int)
您可以编写自己的扩展方法
public static class IntegerExtensions
{
public static int ParseInt(this string value, int defaultValue = 0)
{
int parsedValue;
if (int.TryParse(value, out parsedValue))
{
return parsedValue;
}
return defaultValue;
}
public static int? ParseNullableInt(this string value)
{
if (string.IsNullOrEmpty(value))
{
return null;
}
return value.ParseInt();
}
}
代码中的任何地方都可以调用
int myNumber = someString.ParseInt(); // Returns value or 0
int age = someString.ParseInt(18); // With default value 18
int? userId = someString.ParseNullableInt(); // Returns value or null
在这个具体的例子中
int yourValue = TextBoxD1.Text.ParseInt();
您可以借助parse方法将字符串转换为整数值。
Eg:
int val = Int32.parse(stringToBeParsed);
int x = Int32.parse(1234);
这是通过扩展方法实现的版本,如果转换失败,扩展方法也可以设置默认值。事实上,这就是我用来将字符串输入转换为任何可转换类型的方法:
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://learn.microsoft.com/en-us/dotnet/api/system.iconvertible?view=net-例如,我不需要疯狂的逻辑来将字符串转换为类。
要使用它将字符串转换为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);
}