namespace SJK.Functional; public class Cache where T : class { private T? _cache; private Func _provider; private readonly Func? _isvalid; public Cache(Func provider, Func? isvalid = null) { _provider = provider; _isvalid = isvalid; } public bool IsCached() => _cache is not null; public T Value => _cache is null || (_isvalid is not null && !_isvalid(_cache)) ? _cache = _provider() : _cache; }