int.TryParse合成糖

O.O*_*O.O 44 c# asp.net .net-4.0

int.TryPrase 是伟大的,但只有一个问题......至少需要使用两行代码:

int intValue;
string stringValue = "123";
int.TryParse(stringValue, out intValue);
....
Run Code Online (Sandbox Code Playgroud)

当然我可以这样做:

string stringValue = "123";
int intValue = Convert.ToInt32(string.IsNullOrWhiteSpace(stringValue) ? 0 : stringValue); 
Run Code Online (Sandbox Code Playgroud)

只需一行代码.

我怎样才能让int.TryParse使用一个衬里,或者还有第三种选择?

谢谢!

Bezden最好地回答了这个问题,但实际上我计划使用Reddogs解决方案.

Vla*_*den 69

int intValue = int.TryParse(stringValue, out intValue) ? intValue : 0;
Run Code Online (Sandbox Code Playgroud)

  • 尼斯.当然,唯一的问题是你无法区分输入字符串中的错误值和0 ...它会消除使用TryParse()的重点 (8认同)
  • 这段代码怎么不吓唬人呢?我更喜欢@ Reddog的扩展方法. (3认同)
  • 尼斯.我可以挖掘它. (2认同)
  • @James:我不同意......这取决于上下文。 (2认同)

Red*_*dog 40

也许使用扩展方法:

public static class StringExtensions
{
    public static int TryParse(this string input, int valueIfNotConverted)
    {
        int value;
        if (Int32.TryParse(input, out value))
        {
            return value;
        }
        return valueIfNotConverted;
    }
}
Run Code Online (Sandbox Code Playgroud)

用法:

string x = "1234";
int value = x.TryParse(0);
Run Code Online (Sandbox Code Playgroud)

编辑:当然,你可以添加明显的重载,如果这是你的愿望,已经将默认值设置为零.

  • +1您可能要包括用法`int x =“ 123” .TryParse(1);` (2认同)

Dan*_* Z. 14

这个答案仅适用于至少使用C#7的人.

您现在可以内联声明out参数.

int.TryParse("123", out var result);
Run Code Online (Sandbox Code Playgroud)

为证明它有效,您可以运行以下dotnetfiddle.

if (int.TryParse("123", out var result)) {
    //do something with the successfully parsed integer
    Console.WriteLine(result);
} else {
    Console.WriteLine("That wasn't an integer!");
}
Run Code Online (Sandbox Code Playgroud)

https://dotnetfiddle.net/nn9955