C# 如何安全的將數字型字符串轉為數字?int.TryParse!


.NET Framework提供了一些內置的方法來將C#字符串轉換為int或者其它數值類型,但是在轉換過程中稍不注意可能就會拋出異常,因此找到一個安全有效的方式很重要。



不安全的方式將數值型字符串轉為int類型

 您可以使用幾個內置方法(如下所示)將字符串轉換為int。如果字符串值不是有效整數,則這兩個都會拋出異常。
int.Parse((string) null); // 拋出異常
int.Parse("Hello"); // 拋出異常
int.Parse("1.5"); // 拋出異常
var i = int.Parse("1"); // 正常

var i2 = Convert.ToInt32((string) null); //無異常,返回: 0
Convert.ToInt32("hello"); //拋出異常
Convert.ToInt32("1.5"); //拋出異常
Convert.ToInt32("1"); //正常

除了空字符串方案之外,使用內置方法Convert.ToInt32()和int.Parse()產生相同的結果。Convert.ToInt32()的源代碼中有特殊的邏輯來查找null並在內部調用int.Parse:

public static int ToInt32(string value)
{
    if (value == null)
       return 0;
    return int.Parse(value, (IFormatProvider) CultureInfo.CurrentCulture);
}

如何在字符串轉換為Int時防止異常的出現?

 實際開發中,壞數據、臟數據等是不可避免的。在解析數據和轉換數據類型時,肯定需要去處理一些潛在的異常。在此示例中,將字符串轉為int時可能就會出現異常情況。不過.NET Framework提供了針對這個確切問題而設計的int.TryParse,使用示例如下:

 
        
// 定義一個待轉換的字符串
string incomingData = "Hello";
// 定一個輸出結果值
int parsedResult;
//嘗試進行轉換 ,返回一個bool類型。true:轉換成功  false:轉換失敗
int.TryParse(incomingData, out parsedResult);
如果TryParse失敗,變量parsedResult將為0,正在解析的數據也可能是0。我們可以利用int.ParseInt的返回結果判斷轉換是否成功:
string incomingData = "Hello";
int parsedResult; 

if (int.TryParse(incomingData, out parsedResult))
{
   //do something with the data. 

}

我們利用這一點封裝一個工具類ParseInteger:

public static class ParseInteger
{
    /// <summary>
    /// 字符串轉int
    /// </summary>
    /// <param name="intStr">要進行轉換的字符串</param>
    /// <param name="defaultValue">默認值,默認:0</param>
    /// <returns></returns>
    public static int ParseInt(string intStr, int defaultValue = 0)
    {
        int parseInt;
        if (int.TryParse(intStr, out parseInt))
            return parseInt;
        return defaultValue;
    }
}

調用示例:

Console.WriteLine(ParseInteger.ParseInt("3.0"));
Console.WriteLine(ParseInteger.ParseInt("-1"));
Console.WriteLine(ParseInteger.ParseInt("445"));
Console.WriteLine(ParseInteger.ParseInt("e3"));
Console.WriteLine(ParseInteger.ParseInt(null));

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM