Putting :GetTagged() inside a dictionary will place a table, not its contents. How to get its contents?

1: Raycast script uses a modulescript function getBlacklist().
2: getBlacklist() creates a new table with CollectionService:GetTagged().
3: getTagged() will return a table
4: raycast only accepts objects/instances not tables
5: raycast errors

How do you get the contents inside one table?
I found table.unpack() but it only returns 1 of the contents which is bad in cases where tags are being created and deleted.

I thought of doing:

local descendants = CollectionService:GetTagged("test")
local dictionary = {}
for i, v in pairs(descendants) do
    if v:IsA("MeshPart") then
           table.insert(dictionary, v)

But this might be too expensive as I plan on having this function run every time a gun shoots.

WorldRoot:FindPartOnRayWithIgnoreList accepts a table of objects to ignore. Could you not pass the table returned from CollectionService:GetTagged(…) as the table of objects?

insert its name and find it in the workspace by using table.find and raycast

It accepts a table of objects
but if the table has a table (because :GetTagged()) it will point to a table, not to the objects inside that table.

I settled for iterating over the :GetTagged() table and inserting its contents before returning the getBlacklist custom function.

If anyone has a better solution please share
I feel like this might be expensive if I want to iterate over multiple tags or situations where I have to do :getchildren() or getdescendants()