From bfb795c8ed370eb814da2b8f1b626c1fef6f0f86 Mon Sep 17 00:00:00 2001 From: Vladimir Pecanac Date: Wed, 19 Aug 2026 12:46:41 +0200 Subject: [PATCH] Update IEnumerable vs ICollection vs IList vs List sample to .NET 10 Retarget both projects from net7.0 to net10.0 and add a deferred-execution demonstration showing that a LINQ query re-runs on every enumeration while a materialised ICollection just reads a stored count. --- .../DeferredExecutionDemo.cs | 17 +++++++++++++++++ ...IEnumerableVsICollectionVsIListVsList.csproj | 2 +- .../Program.cs | 5 +++++ .../Tests/Tests.csproj | 2 +- 4 files changed, 24 insertions(+), 2 deletions(-) create mode 100644 collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/DeferredExecutionDemo.cs diff --git a/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/DeferredExecutionDemo.cs b/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/DeferredExecutionDemo.cs new file mode 100644 index 0000000000..0b97db41a6 --- /dev/null +++ b/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/DeferredExecutionDemo.cs @@ -0,0 +1,17 @@ +namespace IEnumerableVsICollectionVsIListVsList +{ + public class DeferredExecutionDemo + { + public void ShowDeferredVsMaterialised(IEnumerable numbers) + { + IEnumerable query = numbers.Where(n => n > 10); + + Console.WriteLine(query.Count()); // runs the filter + Console.WriteLine(query.Count()); // runs the filter again + + ICollection materialised = query.ToList(); + + Console.WriteLine(materialised.Count); // reads a stored value + } + } +} diff --git a/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList.csproj b/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList.csproj index f02677bf64..dfb40caafc 100644 --- a/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList.csproj +++ b/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList.csproj @@ -2,7 +2,7 @@ Exe - net7.0 + net10.0 enable enable diff --git a/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/Program.cs b/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/Program.cs index fd8b07c512..6c7cd01aa3 100644 --- a/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/Program.cs +++ b/collections-csharp/IEnumerableVsICollectionVsIListVsList/IEnumerableVsICollectionVsIListVsList/Program.cs @@ -36,6 +36,11 @@ static void Main(string[] args) output = lst.CountSpecialCharacters(specialCharacter); Console.WriteLine($"List:{output}"); + //Deferred execution vs a materialised collection + var deferred = new DeferredExecutionDemo(); + Console.WriteLine($"Deferred vs materialised:"); + deferred.ShowDeferredVsMaterialised(new List { 5, 11, 12, 42 }); + Console.ReadLine(); } } diff --git a/collections-csharp/IEnumerableVsICollectionVsIListVsList/Tests/Tests.csproj b/collections-csharp/IEnumerableVsICollectionVsIListVsList/Tests/Tests.csproj index c454e67014..f93e17bc1e 100644 --- a/collections-csharp/IEnumerableVsICollectionVsIListVsList/Tests/Tests.csproj +++ b/collections-csharp/IEnumerableVsICollectionVsIListVsList/Tests/Tests.csproj @@ -1,7 +1,7 @@ - net7.0 + net10.0 enable enable