{
    "api": "YAML JSON TOON Database",
    "version": "1.0.0",
    "format": "json",
    "dataset": {
        "id": 392,
        "slug": "csharp-dotnet-features",
        "title": "C# and .NET Modern Features",
        "description": "Modern C# features (C# 8-12) and .NET capabilities: nullable reference types, records, pattern matching, LINQ, async streams, minimal APIs.",
        "category": "Programming Languages",
        "category_slug": "programming-languages",
        "tags": "csharp,dotnet,nullable-reference-types,records,pattern-matching,linq,async-streams",
        "view_count": 3,
        "created_at": 1781275786,
        "updated_at": 1781275786
    },
    "data": {
        "features": [
            {
                "name": "Nullable Reference Types",
                "version": "C# 8.0 \/ .NET Core 3.0",
                "description": "Compiler warnings for potential NullReferenceException: string? means nullable, string means non-nullable",
                "example": "string? middleName = null; string firstName = middleName ?? \"Unknown\";",
                "notes": "Enable with <Nullable>enable<\/Nullable> in .csproj"
            },
            {
                "name": "Records",
                "version": "C# 9.0 \/ .NET 5",
                "description": "Immutable reference types with value equality, positional syntax, with-expressions for non-mutating updates",
                "example": "public record Person(string FirstName, string LastName); var p2 = p1 with { LastName = \"Smith\" };",
                "notes": "Use record class for reference semantics, record struct for value semantics"
            },
            {
                "name": "Pattern Matching",
                "version": "C# 8-12",
                "description": "Type patterns, property patterns, relational patterns, list patterns for expressive conditional logic",
                "example": "return shape switch { Circle c => c.Radius * c.Radius * Math.PI, Rectangle r => r.Width * r.Height, _ => 0 };",
                "notes": "Evolves each version: C# 7 (is\/switch), C# 8 (property\/recursive), C# 10 (extended), C# 12 (list)"
            },
            {
                "name": "LINQ",
                "version": "C# 3.0 \/ .NET Framework 3.5",
                "description": "Language Integrated Query: declarative data querying with deferred execution, query syntax and method syntax",
                "example": "var adults = people.Where(p => p.Age >= 18).Select(p => p.Name).OrderBy(n => n);",
                "notes": "Works with any IEnumerable<T>; IQueryable<T> for remote execution (EF Core, SQL)"
            },
            {
                "name": "Async Streams",
                "version": "C# 8.0 \/ .NET Core 3.0",
                "description": "IAsyncEnumerable<T> for asynchronous iteration over sequences, await foreach",
                "example": "await foreach (var item in GetItemsAsync()) { Process(item); }",
                "notes": "Essential for paginated APIs, database queries, real-time data streams"
            },
            {
                "name": "Minimal APIs",
                "version": ".NET 6",
                "description": "Simplified HTTP API building without controllers: app.MapGet(\"\/\", () => \"Hello\")",
                "example": "var app = WebApplication.Create(args); app.MapGet(\"\/todos\/{id}\", (int id, TodoDb db) => db.Todos.FindAsync(id));",
                "notes": "Reduces boilerplate for small APIs; use for microservices, prototypes, simple backends"
            },
            {
                "name": "Primary Constructors",
                "version": "C# 12 \/ .NET 8",
                "description": "Constructor parameters directly on class\/struct declaration, accessible as instance fields",
                "example": "public class Person(string firstName, string lastName) { public string FullName => $\"{firstName} {lastName}\"; }",
                "notes": "Reduces boilerplate; parameters are in scope for the entire class body"
            },
            {
                "name": "Source Generators",
                "version": ".NET 5 \/ Roslyn 3.8",
                "description": "Compile-time code generation: analyze syntax trees and emit new C# source files",
                "example": "[GenerateSerializer] public class MyData { } \/\/ Generates serialization code at compile time",
                "notes": "Used by System.Text.Json, EF Core, gRPC; eliminates runtime reflection overhead"
            }
        ]
    }
}