为什么MemoryStream会抛出InvalidFormatException?

时间:2016-10-17 21:45:16

标签: c#

我有以下代码行

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

有人能告诉我我做错了吗?

2 个答案:

答案 0 :(得分:2)

写入内存流后,您应该在阅读时再次seek开始,如下所示:

ms.Seek(0, SeekOrigin.Begin);

虽然我猜这是你的Transpiler抛出无效操作异常

答案 1 :(得分:2)

看起来它正在尝试将您的输入转换为数字,我不确定Transpiler是什么,因为堆栈跟踪似乎指向您的代码,但它正在尝试将String转换为数字。< / p>

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”,以使调试器在问题上突破。