c# - LanguageExt:我如何做相当于 Option. 与 [Union] 匹配?
问题描述
我想创建一个类似于 的联合Option<T>
,但它允许 3 路状态,而不是 2 路状态。这样做的原因是在从数据库加载数据时使用它。
如果我用 做这个Option<T>
,我会做这样的事情......
Option<Person> jimOpt = Option<Person>.None;
Person jimOpt = await _appDbContext.People.FirstOrDefault(p => p.Id == 1);
jimOpt.Match(person => {
Console.WriteLine("Jim was found");
},
() => {
Console.WriteLine("No such Jim");
});
但是,这并不能区分何时仍在加载数据和何时找不到此人。这意味着在加载数据时,它Option
处于None
状态,这会在 UI 中产生错误的印象,因为它看起来(短暂地)好像没有找到数据。
我的想法是创建一个Union
这样的......
[Union]
public interface Loading<T> {
Loading<T> NotLoaded(); // Initial state, data not loaded yet
Loading<T> Loaded(T value); // Data loaded successfully
Loading<T> NotFound(); // Data access complete, but entity not found
}
...并执行上述操作,但将其设置为在数据访问进行NotLoaded<Person>
时,然后在数据访问完成时进行。Loaded<Person>
NotFound<Person>
问题是生成的Union
似乎没有什么可以帮助我。我认为代码生成的想法是消除很多繁重的工作。
我是否需要自己实现Match
,Map
等,或者我在代码生成中遗漏了什么?
谢谢。
解决方案
Match
现在为Union
类型生成。您还可以使用 c#switch
表达式
推荐阅读
- java - 从文件夹中删除图像
- xaml - UWP XAMl ListView 项目模板 MVVM 事件
- reactjs - 如何使用 Watir 自动化 Reactjs 下拉菜单
- jquery - 通过数据表中的多个变体搜索
- angular - Angular 通用启动器:无法匹配任何路线。URL 段:“robots.txt”
- javascript - html 5 音频下载按钮未在 iphone 和 mac 中显示
- amazon-web-services - 推动 lambda FCM 后不起作用
- java - 如何使用 GSON 解析错误?
- firebase - 节点上具有自定义 ID 的 Firebase 规则
- excel - 根据单元格值将 Excel 选项卡导出到 Powerpoint 幻灯片