0

所以我期待在 StackOverflow 上找到 Delphi 的 StrToIntDef 函数的明确等价物,但我做不到。

实现以下...

public static int StrToIntDef(string s, int def)
{

}
4

4 回答 4

25

常规号码

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上阅读有关它们的更多信息。

参考

于 2013-03-20T11:34:01.757 回答
9
public static int StrToIntDef(string s, int def)
{
    int temp;
    if (!Int32.TryParse(s, out temp))
        return def;

    return temp;
}
于 2013-03-20T11:33:47.490 回答
3

您可以发出TryParse

int val;
var success = Int.TryParse("1", out val);

或者您可以进行直接转换:

int val = Convert.ToInt32("1");

但简而言之,您不需要自己的功能。当然,除非您需要指定默认值,而不是0当它不转换时。如果是这样,那么您将利用TryParse您的方法,如果它不起作用,则返回传入的默认值。

于 2013-03-20T11:34:04.550 回答
1

试试这个。

int outputInteger;
int.TryParse(inputString, out outputInteger);
于 2013-03-20T11:35:54.403 回答