【发布时间】:2020-06-30 17:25:04
【问题描述】:
我有以下使用CSharpFunctionalExtensions library by Vladimir Khorikov的方法:
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."
);
我很确定图书馆已经支持我正在尝试做的事情,但我正在为“如何做”而苦苦挣扎。非常感谢任何帮助。
【问题讨论】:
标签: c# functional-programming csharpfunctionalextensions