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.