diff --git a/TUnit.Engine/Utilities/ScopedAttributeFilter.cs b/TUnit.Engine/Utilities/ScopedAttributeFilter.cs
index 48984d1373..f08ec4007b 100644
--- a/TUnit.Engine/Utilities/ScopedAttributeFilter.cs
+++ b/TUnit.Engine/Utilities/ScopedAttributeFilter.cs
@@ -1,7 +1,5 @@
-using System.Diagnostics.CodeAnalysis;
-using Polyfills;
using TUnit.Core;
-using TUnit.Engine.Helpers;
+using TUnit.Core.Helpers;
namespace TUnit.Engine.Utilities;
@@ -16,10 +14,10 @@ internal static class ScopedAttributeFilter
/// The type of objects to filter
/// The collection of items to filter
/// A filtered collection with only one instance per scoped attribute type
- public static List FilterScopedAttributes(IEnumerable items) where T : class
+ public static T[] FilterScopedAttributes(IEnumerable items) where T : class
{
- var result = new List();
- var scopedAttributesByType = new Dictionary();
+ var vlb = new ValueListBuilder([null,null,null,null]);
+ Dictionary? scopedAttributesByType = null;
// First pass: collect all scoped attributes, keeping only the first occurrence of each type
foreach (var item in items)
@@ -31,17 +29,26 @@ public static List FilterScopedAttributes(IEnumerable items) where T :
if (item is IScopedAttribute scopedAttribute)
{
+ scopedAttributesByType ??= new Dictionary();
scopedAttributesByType.TryAdd(scopedAttribute.ScopeType, item);
}
else
{
// Not a scoped attribute, include it immediately
- result.Add(item);
+ vlb.Append(item);
}
}
- result.AddRange(scopedAttributesByType.Values);
+ if (scopedAttributesByType != null)
+ {
+ foreach (var value in scopedAttributesByType.Values)
+ {
+ vlb.Append(value);
+ }
+ }
+ var result = vlb.AsSpan().ToArray();
+ vlb.Dispose();
return result;
}
}