У меня есть следующий метод с использованием библиотеки CSharpFunctionalExtensions от Владимир Хориков :
public static Result<SomeObject> Create(string value) =>
value.Length > 10
? Result.Fail<SomeObject>($"{nameof(value)} must be less than 10 characters long.")
: int.TryParse(value, out int result)
? Result.Ok(new SomeObject(result))
: Result.Fail<SomeObject>($"{nameof(value)} must be a number.");
Он делает то, что я хочу, но я не доволен моя реализация. Не похоже, что я наилучшим образом использую библиотеку и ее возможности - но, несмотря на свои исследования, я не могу лучше обернуть голову. Я чувствую, что должен как-то обернуть проверочные вызовы в Result.OnSuccess()
, но они не возвращают Result
, они возвращают bool
значений.
Я пытаюсь сделать что-то вроде этого псевдокода:
public static Result<SomeObject> Create(string value) =>
Result
.Is(
() => !(value.Length > 10, // success criteria
value, // success value
$"{nameof(value)} must be less than 10 characters long." // Result.Fail
).Is(
() => int.TryParse(value, out int result),
result, // changing the success value to an int
$"{nameof(value)} must be a number."
);
Я почти уверен, что библиотека уже поддерживает то, что я пытаюсь сделать, но я борюсь с "как". Любая помощь очень ценится.