C#中安全类型转换的最佳实践是什么?

Zo *_*Has 7 .net c# coding-style

C#中类型转换的最佳实践是什么?

   int temp=System.ConvertToInt32(Request.QueryString["Id"]);
    if (temp!=null)
      { // logic goes here }
Run Code Online (Sandbox Code Playgroud)

如果Id以某种方式变成'abc',则会失败

除了if else语句之外,请建议使用三元运算符和其他单行语句(比如使用单行三元运算符).另外,你们更喜欢TryParse而非转换吗?为什么会这样?有你的发言人.

Jon*_*eet 7

TryParse 具有明显的优势,在失败的情况下,它将返回false而不是抛出异常.

标准模式将是这样的:

int value;
if (int.TryParse(Request.QueryString["Id"], out value))
{
    // Use value
}
else
{
    // Do whatever you want on failure
}
Run Code Online (Sandbox Code Playgroud)

现在,它也是值得铭记,你可以给int.TryParse一个IFormatProviderNumberStyles-例如,你可能要指定CultureInfo.InvariantCultureIFormatProvider如果这是真正的意思是自动生成的ID(而不是由用户输入).

如果你想有效地拥有"默认值",你可以编写一个这样的辅助方法:

public static int? NullableTryParseInt32(string text)
{
    int value;
    return int.TryParse(text, out value) ? value : (int?) null;
}
Run Code Online (Sandbox Code Playgroud)

然后您可以像这样使用它:

int value = NullableTryParseInt32(text) ?? 10;
Run Code Online (Sandbox Code Playgroud)

或者你可以写一个采用默认值的方法,当然:)