Quick answer: Use Godot.Collections.Array<T> for engine APIs. Convert to List<T> via LINQ for managed code.
Function returns Godot.Collections.Array. You assign to List<Node>. Compile error. Two different beasts.
The Fix
using Godot;
using System.Linq;
using System.Collections.Generic;
// Engine API returns Godot.Collections.Array
Godot.Collections.Array<Node> children = GetChildren();
// Convert for LINQ
List<Node> list = children.ToList();
var filtered = list.Where(n => n.Visible).ToList();
// Pass back to engine
Godot.Collections.Array<Node> back = new(filtered);
Godot.Collections.Array is required where Godot APIs expect Variant. List is for managed-only LINQ work.
Verifying
Compile clean. LINQ runs on List. Result converts back to Godot Array for signal emit. No conversion errors.
“Engine: Godot Array. Code: List. Convert at boundaries.”
Related Issues
For C# Export flags, see flags. For C# signal emit, see signal emit.
Convert at boundaries. Types align.