class Validator
{
public string ActualValidationString { get; private set; } = string.Empty;
public void Validation(string msg)
{
ActualValidationString = msg;
}
}
Теперь вы можете использовать его таким образом:
var validator = new Validator();
var actualValue = DictionaryExtensions.GetBool
(
metadata,
MetadataKey,
defaultValue,
validator.Validation
);
actualValue.Should().Be(expectedValue);
validator.ActualValidationString.Should().Be(expectedValidateString);
Использование класса, вероятно, является наиболее идиоматичным решением в C#. Но если вы действительно настаиваете на "единственном приватном методе", можно также реализовать это в терминах двух закрытий, разделяющих общую переменную:
static (Action<string>, Func<string>) CreateValidator()
{
string actualString=string.Empty;
return (s => actualString=s , () => { return actualString;});
}
Это должно быть использовано таким образом:
var validator = CreateValidator();
var actualValue = DictionaryExtensions.GetBool
(
metadata,
MetadataKey,
defaultValue,
validator.Item1
);
actualValue.Should().Be(expectedValue);
validator.Item2().Should().Be(expectedValidateString);
Это решение немного короче, чем первое, но может быть - спорно - немного сложнее для понимания, если человек не привык к функциональному программированию.Это решение