I invariably end up using Func<TModel, TModel> instead of Action<TModel> for stuff like this to support immutable objects/properties. Increasingly common with records now, but not really needed if everything is always mutable on the objects you are validating.