c# - 安全解析字符串的最佳做法是什么?

标签 c# .net coding-style

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

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

如果 Id 不知何故变成'abc',这将失败

除了 if else 语句(例如使用单行三元运算符)之外,请建议使用三元运算符和其他单行语句。另外,你们更喜欢 TryParse 而不是 Convert & 为什么这样?有你的发言权。

最佳答案

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

标准模式是这样的:

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

现在,还值得记住的是,您可以为 int.TryParse 提供一个 IFormatProvider 和一个 NumberStyles - 例如,您可以我们希望将 CultureInfo.InvariantCulture 指定为 IFormatProvider 如果这确实是一个自动生成的 ID(而不是用户输入的 ID)。

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

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

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

int value = NullableTryParseInt32(text) ?? 10;

当然,您也可以只编写一个采用默认值的方法:)

关于c# - 安全解析字符串的最佳做法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3456909/

相关文章:

c# - 如何将一个控件的属性绑定(bind)到另一个控件?

c# - 在此 .net 示例中是否应通过引用传递参数?

c# - 设置 RadioButton 的值属性

c# - 在 C# 中使用字典的正确方法是什么?

c# - C# 中有哪些良好的编程实践可以使代码更加不言自明?

c# - 如何在 Windows 10 中打开显示设置(语法上,特别是使用 C#)?

c# - 使用 FreeImage 是否可以在 ARGB32 或 RGBA32 而不是 BGRA32 中输出 ConvertToRawBits?

c# - Autofac - 如何创建带参数的生成工厂

c# - 匿名类型 VS 局部变量,什么时候应该使用?

c - 如何命名结构变量