我无法将字符串数组中的值转换为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:输入字符串的格式不正确。
有人可以向我提供一些建议,说明处理此问题的最佳方法是什么?
答案 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>");