using System.Collections; using System.Linq; namespace Unity.VisualScripting { /// /// Returns the first item in a collection or enumeration. /// [UnitCategory("Collections")] public sealed class FirstItem : Unit { /// /// The collection. /// [DoNotSerialize] [PortLabelHidden] public ValueInput collection { get; private set; } /// /// The first item of the collection. /// [DoNotSerialize] [PortLabelHidden] public ValueOutput firstItem { get; private set; } protected override void Definition() { collection = ValueInput(nameof(collection)); firstItem = ValueOutput(nameof(firstItem), First); Requirement(collection, firstItem); } public object First(Flow flow) { var enumerable = flow.GetValue(collection); if (enumerable is IList) { return ((IList)enumerable)[0]; } else { return enumerable.Cast().First(); } } } }