1

我无法将字符串数组中的值转换为 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:输入字符串的格式不正确。

有人可以就处理这个问题的最佳方法向我提供一些建议吗?

4

5 回答 5

3

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

例如

int val = 0;
if (int.TryParse(splitLine[10], out val))
   obj.intValue = val;
于 2012-06-21T18:32:54.343 回答
3

您可以使用 TryParse 方法:

int value;
if(Int32.TryParse(splitLine[10], out value))
{
    object.intValue = value;
} 
else 
{
    // Do something with incorrect parse value
}
于 2012-06-21T18:34:13.360 回答
2
if (splitLine[10] != null)
    object.intValue = Convert.ToInt32(splitLine[10]);
else
    //do something else, if you want

您可能还想splitLine.Length > 10在获取splitLine[10].

如果您正在读取类似 CSV 文件的内容,并且它可能会有些复杂,例如读取多个值,那么使用连接字符串或其他库排序的东西来读取您的文件可能会有意义. 从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 引擎的部分。

于 2012-06-21T18:32:22.203 回答
1

如果您正在寻找最少的代码编写,请尝试

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

如果要保留 null in 的含义splitLine[10],则需要将类型更改为intValuetype Nullable<Int32>,然后可以将 null 分配给它。这将代表更多的工作,但这是将空值与整数等值类型一起使用的最佳方法,无论您如何获取它们。

于 2012-06-21T18:35:21.740 回答
1

我会去

object.intValue = int.Parse(splitLine[10] ?? "<int value you want>");
于 2012-06-21T18:38:38.730 回答