From e2d4b24adae0b6012fe3c37747a280175b74d5cc Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Thu, 28 May 2026 18:15:49 +0100 Subject: [PATCH 1/2] perf: avoid Cast().FirstOrDefault() iterator alloc in CastHelper (#6029) --- TUnit.Core/Helpers/CastHelper.cs | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/TUnit.Core/Helpers/CastHelper.cs b/TUnit.Core/Helpers/CastHelper.cs index 060b439e71..46a9bd918c 100644 --- a/TUnit.Core/Helpers/CastHelper.cs +++ b/TUnit.Core/Helpers/CastHelper.cs @@ -160,7 +160,12 @@ private static bool TryAotSafeConversion(Type targetType, Type sourceType, objec // Unwrap single-element enumerables (but not strings or arrays) if (value is not string && !sourceType.IsArray && value is IEnumerable enumerable && !typeof(IEnumerable).IsAssignableFrom(targetType)) { - var firstElement = enumerable.Cast().FirstOrDefault(); + object? firstElement = null; + foreach (var e in enumerable) + { + firstElement = e; + break; + } if (firstElement != null) { // Recursively try to cast the first element From 1116d0864d3cd9213697df0a1c1f03dec2ab6d44 Mon Sep 17 00:00:00 2001 From: Tom Longhurst <30480171+thomhurst@users.noreply.github.com> Date: Thu, 28 May 2026 18:57:16 +0100 Subject: [PATCH 2/2] refactor: rename loop var e to item in CastHelper MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses review nit on #6074 — clearer loop variable name. --- TUnit.Core/Helpers/CastHelper.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TUnit.Core/Helpers/CastHelper.cs b/TUnit.Core/Helpers/CastHelper.cs index 46a9bd918c..b7794ff693 100644 --- a/TUnit.Core/Helpers/CastHelper.cs +++ b/TUnit.Core/Helpers/CastHelper.cs @@ -161,9 +161,9 @@ private static bool TryAotSafeConversion(Type targetType, Type sourceType, objec if (value is not string && !sourceType.IsArray && value is IEnumerable enumerable && !typeof(IEnumerable).IsAssignableFrom(targetType)) { object? firstElement = null; - foreach (var e in enumerable) + foreach (var item in enumerable) { - firstElement = e; + firstElement = item; break; } if (firstElement != null)