2016-10-17 4 views
0

私はコードMemoryStreamがInvalidFormatExceptionをスローするのはなぜですか?

var input = "<x"; 
var ms = new MemoryStream(); 
var test = System.Text.Encoding.UTF8.GetBytes(input); 
ms.Write(test, 0, test.Length); 
var sut = new Web.Transpiler.Transpiler(); 
var rs = await sut.TranspileAsync(ms); 

の次の行を持っている最後の行は、スタック内で次のようにFormatExceptionをスローします。

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 
at System.Byte.Parse(String s, NumberStyles style, NumberFormatInfo info) 
at MyProject.Transpiler.<TranspileAsync>d__4.MoveNext() 
in C:\Users\thala\Documents\Projects\my-project\MyProject\Transpiler\Transpiler.cs:line 22 

私が間違っていることを誰かに教えてもらえますか?それからの読み取り時

+0

「Transpiler」の解析コードのような音は、数字を期待していますが、入力文字列は数字ではありません。 –

答えて

2

メモリストリームに書き込みをした後、あなたはそうのように、再びスタートをseek必要があります。私はそれはそれはそれのように見えるはInvalidOperation例外

+0

興味深い。 TranspileAsyncコードの最初の行に問題があることが判明したByte.Parse()ステートメントがあります。このメソッドは、私がそれに入るときに戻ります。 Byte.Parse()ステートメントでエラーが発生しない理由はわかりません。 – pthalacker

2

を投げ、あなたのTranspilerだと思うけど

ms.Seek(0, SeekOrigin.Begin); 

あなたの入力を数値に変換しようとしていますが、スタックトレースがあなたのコードを指しているように見えますが、文字列を数値に変換しようとしています。

at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) 
at System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) 
at System.Byte.Parse(String s, NumberStyles style, NumberFormatInfo info) 
at MyProject.Transpiler.<TranspileAsync>d__4.MoveNext() 

Byte.Parseなどのように見えます。

Visual Studioの例外設定を見て、 "Break on CLR Exceptions"を "ON"に設定すると、デバッガーが問題のある行でブレークするようになります。

関連する問題