Read and validate environment variables with defaults

C#
using System;
using System.Globalization;

static string RequireEnv(string name) =>
    Environment.GetEnvironmentVariable(name) is { Length: > 0 } value
        ? value
        : throw new InvalidOperationException($"Missing environment variable: {name}");

static int IntEnv(string name, int fallback, int min = 0, int max = int.MaxValue)
{
    string? raw = Environment.GetEnvironmentVariable(name);
    if (string.IsNullOrWhiteSpace(raw)) return fallback;
    if (!int.TryParse(raw, NumberStyles.Integer, CultureInfo.InvariantCulture, out int value))
        throw new InvalidOperationException($"{name} must be an integer, got '{raw}'");
    if (value < min || value > max)
        throw new InvalidOperationException($"{name} must be within [{min}, {max}]");
    return value;
}