所以我期待在 StackOverflow 上找到 Delphi 的 StrToIntDef 函数的明确等价物,但我做不到。
实现以下...
public static int StrToIntDef(string s, int def)
{
}
所以我期待在 StackOverflow 上找到 Delphi 的 StrToIntDef 函数的明确等价物,但我做不到。
实现以下...
public static int StrToIntDef(string s, int def)
{
}
public static int StrToIntDef(string s, int @default)
{
int number;
if (int.TryParse(s, out number))
return number;
return @default;
}
此方法使用了一些初学者不太可能知道的更高级的 C# 功能,它们是:
@
在 default 前面添加,这是为了防止编译错误,因为它是 C# 关键字。number
将参数作为传递out
,这意味着数字将在函数内更新并返回,尽管它是值类型。还有一个额外的重载可用于解析不同样式的数字:
public static bool TryParse(
string s,
NumberStyles style,
IFormatProvider provider,
out int result
)
这是NumberStyles
可以与此重载结合使用以解析异常形成的数字(如货币或十六进制)的列表。
None
AllowLeadingWhite
AllowTrailingWhite
AllowLeadingSign
AllowTrailingSign
AllowParentheses
AllowDecimalPoint
AllowThousands
AllowExponent
AllowCurrencySymbol
AllowHexSpecifier
Integer
HexNumber
Number
Float
Currency
Any
例如,传递一个十六进制数:
string hex = "AB";
int hexInt = int.Parse(hex, NumberStyles.HexNumber);
或删除括号和空格:
string number = " (2) ";
int castedNumber = int.Parse(num, NumberStyles.AllowParentheses |
NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite);
在MSDN上阅读有关它们的更多信息。
public static int StrToIntDef(string s, int def)
{
int temp;
if (!Int32.TryParse(s, out temp))
return def;
return temp;
}
您可以发出TryParse
:
int val;
var success = Int.TryParse("1", out val);
或者您可以进行直接转换:
int val = Convert.ToInt32("1");
但简而言之,您不需要自己的功能。当然,除非您需要指定默认值,而不是0
当它不转换时。如果是这样,那么您将利用TryParse
您的方法,如果它不起作用,则返回传入的默认值。
试试这个。
int outputInteger;
int.TryParse(inputString, out outputInteger);