Yan Cui
I help clients go faster for less using serverless technologies.
This one took me by surprise a little but there’s something about the Enumerable.Except method which you ought to know about. At first you might have assumed (as I did) that given an array as the base set and calling the Except extension method with a second array will return all the items in the first array which do not appear in the second array.
Well, not exactly, for instance:
var list1 = new[] { 1, 1, 1, 1 }; var list2 = Enumerable.Empty<int>(); var result = list1.Except(list2); // returns { 1 } instead of the expected { 1, 1, 1, 1 } var list3 = new[] { 1, 1, 2, 2, 3 }; var list4 = new[] { 1 }; var result2 = list3.Except(list4); // returns { 2, 3 } instead of the expected { 2, 2, 3 }
Does it surprise you that only distance instances of the original array is returned by the Except method? Whilst I haven’t found any official Microsoft documentation/article on why Except behaves in this way, the best explanation I have heard so far is that Except performs a set operation, according to MSDN:
Produces the set difference of two sequences by using the default equality comparer to compare values.
And a Set in the mathematical sense is defined as:
A set is a collection of distinct objects, considered as an object in its own right
Whenever you’re ready, here are 3 ways I can help you:
- Production-Ready Serverless: Join 20+ AWS Heroes & Community Builders and 1000+ other students in levelling up your serverless game. This is your one-stop shop for quickly levelling up your serverless skills.
- I help clients launch product ideas, improve their development processes and upskill their teams. If you’d like to work together, then let’s get in touch.
- Join my community on Discord, ask questions, and join the discussion on all things AWS and Serverless.
Pingback: LINQ – Some pitfalls to look out for | theburningmonk.com