1

値が null である可能性があるため、文字列配列の値を int に変換する際に問題が発生しています。

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

これは、splitLine[10] が null の場合を除いてうまく機能します。
エラーがスローされます: `System.FormatException: 入力文字列が正しい形式ではありませんでした。

これを処理するための最善のアプローチについて、誰かがアドバイスをくれますか?

4

5 に答える 5

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 に答える
3

convert を使用しないでください。 int.TryParse()

例えば

int val = 0;
if (int.TryParse(splitLine[10], out val))
   obj.intValue = val;
于 2012-06-21T18:32:54.343 に答える
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))。Jet エンジンの使用については、 http://www.codeproject.com/Articles/27802/Using-OleDb-to-Import-Text-Files-tab-CSV-customのセクションを参照してください。

于 2012-06-21T18:32:22.203 に答える
1

書くコードを最小限にしたい場合は、試してみてください

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

の null の意味を維持したい場合は、 の型を の型splitLine[10]に変更する必要があります。その後、null をそれに割り当てることができます。これはより多くの作業を表すことになりますが、取得方法に関係なく、null 値を整数などの値型で使用する最良の方法です。intValueNullable<Int32>

于 2012-06-21T18:35:21.740 に答える
1

私は一緒に行きます

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