C# 在以下IF块中解密长度时初始化数组

C# 在以下IF块中解密长度时初始化数组,c#,arrays,encryption,scope,C#,Arrays,Encryption,Scope,我目前有一个方法,我试图用字节数组做一些事情。但是,此字节数组的长度取决于方法的参数。我需要在if-else块之前声明数组,而不是在其中,否则变量超出范围 该方法的示例如下所示: private static byte[] messageFormatting(string bodyText, byte packetType) { int index = 0; byte[] messageBody; if(packetType == 0x03) {

我目前有一个方法,我试图用字节数组做一些事情。但是,此字节数组的长度取决于方法的参数。我需要在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=newbyte[]
。但是如果我删除这个声明,if-else块下面的引用就超出了范围。在加密发生之前,我不知道
messageBody
的长度。有什么建议吗?

我猜你的错误就在这里:

byte[] RSAEncryptedMessageBody = RSAEncrypt(bodyText);
messageBody = new byte[(RSAEncryptedMessageBody.Length)];

RSAEncrypredMessageBody可能为空。你的rsacencrypt函数在做什么?

我猜你的错误在这里出现了:

byte[] RSAEncryptedMessageBody = RSAEncrypt(bodyText);
messageBody = new byte[(RSAEncryptedMessageBody.Length)];

RSAEncrypredMessageBody可能为空。你的rsacencrypt函数在做什么?

你的代码对我来说很好。可能需要再次检查该错误的来源。(在我给它添加了一个返回后,就是这样)。添加一些断言。例如,RSA加密是否返回空值?还有,为什么要复制数组?@Wjdavis5它编译得很好,但任何运行它的尝试都会引发“对象引用未设置为对象实例”异常。RSAEncrypt返回一个字节arrayOk,但在您的问题中,您明确声明它未编译。@Wjdavis5 ahhh是这样的,抱歉。我会更新我的问题你的代码对我来说很好。可能需要再次检查该错误的来源。(在我给它添加了一个返回后,就是这样)。添加一些断言。例如,RSA加密是否返回空值?还有,为什么要复制数组?@Wjdavis5它编译得很好,但任何运行它的尝试都会引发“对象引用未设置为对象实例”异常。RSAEncrypt返回一个字节arrayOk,但在您的问题中,您明确声明它未编译。@Wjdavis5 ahhh是这样的,抱歉。我将在进一步调查错误后更新我的问题,它确实返回空值。我得到了一个“坏长度”异常,它在一个try-catch中返回null。感谢您,这就是为什么您没有捕获库函数中的异常并让这些函数的调用方对它们执行任何操作的原因。在深入查看错误后,它确实返回null。我得到了一个“坏长度”异常,它在一个try-catch中返回null。谢谢,这就是为什么您不能捕获库函数中的异常,并让这些函数的调用方对它们执行任何操作