当可以使用空字符串值时,将字符串数组值转换为int

时间:2012-06-21 18:31:00

标签: c# null int arrays

我无法将字符串数组中的值转换为int,因为该值可能为null。

StreamReader reader = File.OpenText(filePath);
string currentLine = reader.ReadLine();
string[] splitLine = currentLine.Split(new char[] { '|' });
object.intValue = Convert.ToInt32(splitLine[10]);

除了splitLine [10]为空时,这很有用 抛出错误:`System.FormatException:输入字符串的格式不正确。

有人可以向我提供一些建议,说明处理此问题的最佳方法是什么?

5 个答案:

答案 0 :(得分:3)

不要使用转换,最好使用  int.TryParse()

e.g。

int val = 0;
if (int.TryParse(splitLine[10], out val))
   obj.intValue = val;

答案 1 :(得分:3)

您可以使用TryParse方法:

int value;
if(Int32.TryParse(splitLine[10], out value))
{
    object.intValue = value;
} 
else 
{
    // Do something with incorrect parse value
}

答案 2 :(得分:2)

if (splitLine[10] != null)
    object.intValue = Convert.ToInt32(splitLine[10]);
else
    //do something else, if you want

您可能还想在splitLine.Length > 10之前检查splitLine[10]

如果您正在阅读类似CSV文件的内容,并且可能会有些复杂,例如读取多个值,那么使用连接字符串或其他库 - sorta-thing可能会有意义读你的文件。从http://www.connectionstrings.com/textfile获取示例连接字符串,使用Delimited(|)指定分隔符,然后像using (var conn = new OleDbConnection(connectionString))一样使用它们。请参阅http://www.codeproject.com/Articles/27802/Using-OleDb-to-Import-Text-Files-tab-CSV-custom中有关使用Jet引擎的部分。

答案 3 :(得分:1)

如果您要查找的代码最少,请尝试

object.intValue = Convert.ToInt32(splitLine[10] ?? "0");

如果要在splitLine[10]中保留null的含义,则需要将intValue的类型更改为Nullable<Int32>类型,然后您可以指定null它。这将代表更多的工作,但这是使用值类型(如整数)的空值的最佳方式,无论您如何获得它们。

答案 4 :(得分:1)

我会选择

object.intValue = int.Parse(splitLine[10] ?? "<int value you want>");