2011-08-21 80 views
-1

的我收到一个错误:使用未分配的局部变量错误

"Use of unassigned local variable 'PostData'"

编译下面的方法中下面的语句时。我的意图是获取包含XML SOAP标头的“字符串”值,并将其转换为XMLDictionaryWriter对象。见下面我的代码:

Stream PostData; 
byte[] buffer = Encoding.ASCII.GetBytes(x509.CreateX509SoapEnvelope()); 
PostData.Write(buffer, 0, buffer.Length); // error here 
XmlDictionaryWriter xmlwriter = XmlDictionaryWriter.CreateTextWriter(PostData, Encoding.ASCII); 
request.Headers.WriteHeaderContents(0,xmlwriter); 

仅供参考,的x509.CreateX509SoapEnvelope()输出是一个字符串,我测试的一部分,它的工作原理。我标记了上面的代码以显示错误发生的位置。需要帮助解决错误以及如何解决它?

+1

是整个代码块吗?你声明'Stream PostData',但没有将它构造成任何东西,所以它只是坐在'null'中。当你对它做'.Write'时,你会得到一个空引用异常。 – debracey

+0

XmlDictionaryWriter.CreateTextWriter接受流类型,因此我需要将我的字符串值转换为流,然后在XMLDictionaryWriter实例化时将其作为参数传递。有没有更好的方法来修改我的代码? – wcfvemi

回答

5

您从未将值分配给PostData。因此,它的默认值是null,编译器足够聪明,可以告诉你这是一件坏事(如果它允许你的代码原样,你将得到一个运行时间NullReferenceException)。您需要实例化一个类为StreamStream是抽象的,因此您需要一个具体实例)的实例并将其分配给PostData

+0

我的计划是采取字符串输出,并将其作为参数传递给WriteHeaderContents方法,该方法可以接受XMLDictionaryWrite或XMLWriter类型..有没有更好的方法来做到这一点? – wcfvemi

3

您已声明PostData,但未初始化它。

你需要有:

Stream PostData = new StreamWriter(filename); 

在最低限度。有关各种初始程序的更多信息,请参阅MSDN documentation

+1

-1错误拼写“已初始化”。 –

+0

我没有指定..的文件名,但我需要将“string”输出的内容写入Stream。我如何实例化以适应这种情况? – wcfvemi

0

我想我是在跟你一样的事情。我使用了一个不需要文件来实例化的MemoryStream。请参阅下面的参考:

MemoryStream

相关问题