【发布时间】:2016-07-28 16:09:34
【问题描述】:
我目前有一个方法,我正在尝试用字节数组做一些事情。然而,这个字节数组的长度取决于方法的参数。我需要在 if-else 块之前而不是在其中声明数组,否则变量超出范围。
该方法的一个例子如下:
private static byte[] messageFormatting(string bodyText, byte packetType)
{
int index = 0;
byte[] messageBody;
if(packetType == 0x03)
{
byte[] RSAEncryptedMessageBody = RSAEncrypt(bodyText);
messageBody = new byte[(RSAEncryptedMessageBody.Length)];
Array.Copy(RSAEncryptedMessageBody, messageBody, RSAEncryptedMessageBody.Length);
}
else
{
messageBody = System.Text.Encoding.ASCII.GetBytes(bodyText);
}
byte[] fullMessage = new byte[(messageBody.Length + 6)];
//do others things
}
执行该方法时出现异常错误,因为我不能有未设置为对象实例的对象引用。
当我在前面的byte[] messageBody 中有一个空白初始化时,我认为这意味着我不能做messageBody = new byte[]。但是如果我删除这个声明,if-else 块下面的引用就超出了范围。在加密发生之前,我不知道messageBody 的长度。有什么建议吗?
【问题讨论】:
-
你的代码片段对我来说编译得很好。可能需要仔细检查该错误的来源。 (在我添加了一个返回之后)。
-
加入一些断言。例如。 RSAEncrypt 返回 null 吗?还有你为什么要复制数组?
-
@Wjdavis5 它编译得很好,但是任何运行它的尝试都会抛出“对象引用未设置为对象的实例”异常。 RSAEncrypt 返回一个字节数组
-
好的,但是在您的问题中,您明确指出它无法编译。
-
@Wjdavis5 啊,我做到了,抱歉。我会更新我的问题
标签: c# arrays encryption scope