【发布时间】:2020-06-18 00:09:26
【问题描述】:
我正在使用 C# LanguageExt https://github.com/louthy/language-ext
我有一个类 MyDto 从一些 Json 中解析出来。解析函数返回Either<Error, Mydto>。
如果 dto 匹配给定的规则,或者它是一个错误,那么我想取回结果,否则,什么都没有。
最后的结果应该是Option<Either<Error, Mydto>>类型。
我最终得到了这样的东西
Option<Either<Error, MyDto>> finalResult =
MyDto.From("some json") // Returns Either<Error, MyDto>
.Right(dto => (dto.Equals("something")
? Some<Either<Error, IDhResponse>>(Right(dto))
: None))
.Left(error => Some<Either<Error, IDhResponse>>(Left(error)));
我不太喜欢它,因为它呈现出太多的重复。
然后我尝试了这个
MyDto.From("some json") // Returns Either<Error, MyDto>
.Map(dto => dto.Equals("something")
? Some(dto)
: None)
但它返回Either<Error, Option<MyDto>>,如果此时我能够将选项带出,那看起来还不错。不幸的是,我找不到任何可以做到这一点的东西。
有什么东西存在吗?还是有更好的方法来实现我的目的?
也许像
MyDto.From("some json") // Returns Either<Error, MyDto>
.Where(dto => dto.Equals("something")) // Only applies to Right branch and wrap everything in Option when fails
感谢您对此的任何建议。
【问题讨论】:
标签: c# functional-programming optional either language-ext