Designing a dynamic array of Memory Streams
You might need to create a class handler that would handle the PdfDocument and MemoryStream, which will make things easier to handle and disposed as well. Then, you can just adjust the handler to your application requirements. here is an example : 

public class PdfDocumentManager
{
    // Use Dictionary to keep both PdfDocument and MemoryStream paired.
    // Also, this means, you'll only save unique PdfDocuments and work on them. 
    // if you want to save a PdfDocument multiple times (say different copy of the original copy)
    // use List&lt;KeyValuePair&lt;PdfDocument, MemoryStream&gt;&gt; instead.
    private readonly Dictionary&lt;PdfDocument, MemoryStream&gt; _storage = new Dictionary&lt;PdfDocument, MemoryStream&gt;();

    public PdfDocumentManager() { }

    public void Add(PdfDocument document)
    {
        // don't forget to validate 

        _storage.Add(document, ToMemoryStream(document));
    }

    public void AddRange(IEnumerable&lt;PdfDocument&gt; documents)
    {
        foreach(var document in documents)
        {
            // validate each document before adding it.     
            Add(document);
        }
    }

    public void Remove(PdfDocument document)
    {
        // code to remove the saved stream.
        // choose MemoryStream or PdfDocument or Both if you want.
    }

    private MemoryStream ToMemoryStream(PdfDocument document)
    {
        using (MemoryStream stream = new MemoryStream())
        {
            document.Save(stream);
            return stream;
        }
    }

    private PdfDocument ToPDFDocument(MemoryStream stream)
    {
        // code to convert back to memory stream.
        // just search the values to return its key.
        // if there is no match, then create a new PdfDocument along with MemoryStream, then return it back.
    }

    public IEnumerable&lt;PdfDocument&gt; GetAvailableDocuments()
    {
        return _storage.Keys;
    }

    public IEnumerable&lt;MemoryStream&gt; GetAvailableStreams()
    {
        return _storage.Values;
    }


}


simple add usage : 

// initiate 
var pdfManager = new PdfDocumentManager();

// add single document 
pdfManager.Add(new PdfDocument(testParametersToDesignUniquePDF1));
pdfManager.Add(new PdfDocument(testParametersToDesignUniquePDF2));

// add multiple PdfDocument
var pdfDocumentList = new List&lt;PdfDocument&gt;
{
    new PdfDocument(testParametersToDesignUniquePDF1),
    new PdfDocument(testParametersToDesignUniquePDF2)
}

pdfManager.AddRange(pdfDocumentList);


The methods in this class are just for demonstration purpose only. You can bind the idea to your actual needs. With this handler, you can even make it a singleton class or make _storage static to have only one storage for the duration of the application ..etc. You can also move some related conditions inside the class to validate the documents (for instance, if you check if that document existed or not ..etc). This would give you also an easier way to handle the disposable objects.