int.TryParse语法糖
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了int.TryParse语法糖相关的知识,希望对你有一定的参考价值。
int.TryPrase
非常好,但只有一个问题......至少需要使用两行代码:
int intValue;
string stringValue = "123";
int.TryParse(stringValue, out intValue);
....
当然我可以这样做:
string stringValue = "123";
int intValue = Convert.ToInt32(string.IsNullOrWhiteSpace(stringValue) ? 0 : stringValue);
只需一行代码。
我怎样才能让int.TryParse使用一个衬里,或者还有第三种选择?
谢谢!
Bezden最好地回答了这个问题,但实际上我打算使用Reddogs解决方案。
int intValue = int.TryParse(stringValue, out intValue) ? intValue : 0;
也许使用扩展方法:
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;
}
}
用法:
string x = "1234";
int value = x.TryParse(0);
编辑:当然,你可以添加明显的重载,如果这是你的愿望,已经将默认值设置为零。
这个答案仅适用于至少使用C#7的人。
您现在可以内联声明out参数。
int.TryParse("123", out var result);
示例用法:
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!");
}
MSDN:https://docs.microsoft.com/de-de/dotnet/csharp/whats-new/csharp-7#out-variables
我会创建一个扩展方法。
public static int? AsInt32(this string s)
{
int value;
if (int.TryParse(s, out value))
return value;
return null;
}
我不认为有什么真正美丽,但如果你喜欢这个,你可以把它归结为一行:
string stringValue = "123"
int intValue = int.TryParse(stringValue, out intValue) ? intValue : 0;
看看StringExtensions课程。它包含一个AsInt(String,Int32)扩展方法,它将尝试转换字符串,如果不成功,则使用提供的Int32值将其填充为默认值。
例:
var intValue = "123".AsInt(-1);
你不想让int.TryParse()一行。为什么?因为如果输入字符串不是有效整数,则无法对intValue进行赋值。 TryParse()的重点是允许您测试良好的输入并优雅地降级,而不是必须捕获异常。
Int.TryParse()已经是一个快捷方式,所以你不必测试有效的int并分两步完成赋值......就你想要的那样而言。
因为它基本上返回两个值(成功和值),我们确实需要这两行。
你可以尝试一个包装类,即:
void Main()
{
var result = simpleIntParser.TryParse("1");
if(result)
{
Console.WriteLine((int)result);
} else {
Console.WriteLine("Failed");
}
result = simpleIntParser.TryParse("a");
if(result)
{
Console.WriteLine((int)result);
} else {
Console.WriteLine("Failed");
}
}
public class simpleIntParser
{
public bool result {get; private set;}
public int value {get; private set;}
private simpleIntParser(bool result, int value)
{
this.result = result;
this.value = value;
}
public static simpleIntParser TryParse(String strValue)
{
int value;
var result = int.TryParse(strValue, out value);
return new simpleIntParser(result, value);
}
public static implicit operator int(simpleIntParser m)
{
return m.value;
}
public static implicit operator bool(simpleIntParser m)
{
return m.result;
}
}
如果类型不明确(例如对于Console.WriteLine()),则需要强制转换,但如果将其作为整数参数传递,则不需要强制转换
int val2 = "asd".AsInt(-1);
//Output : -1
int val3 = "123".AsInt(-1);
//Output : 123
你需要有System.Web.WebPages
命名空间。
以上是关于int.TryParse语法糖的主要内容,如果未能解决你的问题,请参考以下文章
如何将 int.TryParse 与可为空的 int 一起使用? [复制]
C#的(int) /int.Parse()/int.TryParse()/Convent.ToInt32()的区别--推荐使用Int.TryParse()
将 int.TryParse 与可为空的 int 一起使用 [重复]