Records and Collections

#551 – April 06, 2025

Points of friction when using records and collections

Records and Collections
12 minutes by Jon Skeet

This post discusses Jon Skeet's experiences using C# records and collections in his election site project. He appreciates records for immutable data models but identifies several friction points like the inability to specify custom equality comparers for individual record properties, the lack of a built-in reference equality comparer, or issues with string comparisons that led him to create extension methods for ordinal string comparisons.

Why Documentation Fails Developers
sponsored by Unblocked

Developer documentation is a paradox. Teams spend hours writing it, yet it’s often outdated, incomplete, or hard to navigate. But the solution isn’t writing more or centralizing documentation—it’s surfacing the context where developers need it.

Production Ready Event Sourcing in .NET
17 minutes by Nick Chapsas

In this video, Nick will show you how to get started with Event Sourcing in .NET using Marten, the best Event Sourcing library in .NET.

Why F#?
23 minutes by Bozhidar Batsov

Bozhidar dives deep into NET after a 15-year hiatus, specifically exploring F#, a functional programming language in the ML family. He shares their positive initial impressions of F#, highlighting its clean syntax, strong type system, and interoperability with the .NET ecosystem. He compares F# with OCaml, noting F#'s advantages like better tooling and .NET integration, while acknowledging its smaller community. Despite being relatively niche, Bozhidar found F# to be both practical and enjoyable, calling it "seriously fun and seriously practical."

Competing Consumers Pattern: The Underrated Key to handling more load
4 minutes by Irina Dominte

In this article Irina explains the Competing Consumers Pattern, a design approach for distributed systems where multiple consumers process messages from a single queue, with each message handled by only one consumer. This pattern enables horizontal scalability, resilience through redundancy, and effective handling of variable workloads without modifying producer logic. While offering significant benefits, the pattern has trade-offs including potential message ordering issues and requirements for idempotent processing, making it ideal for bursty workloads but unsuitable when strict message ordering or exactly-once processing is required.

Advanced Dependency Injection Techniques
8 minutes by Mukesh Murugan

In this article, Mukesh explores what Keyed Services are, how they work, and how to use them effectively in your .NET applications. He looks at clean DI patterns, real-world examples, and common pitfalls to avoid. If you’ve mastered the basics of Dependency Injection, this is the next step.

Next, a couple of .NET open source projects are going commercial:

And the most popular article from the last issue:

newsletters