f# - F# struct 与 C# 的判别联合互操作:强制转换为特定情况
问题描述
使用参考判别联合,例如
type Result<'T,'TError> =
| Ok of 'T
| Error of 'TError
您可以转换为 C# 中的一种情况,var error = (Result<T,TError>.Error) result
但不能使用等效的 struct 判别联合进行编译。
如何在 C# 互操作场景中转换为特定的结构判别联合情况?或者,如何在 CLR 类型中表示结构判别联合案例?
解决方案
首先,没有等效的 struct DU。切换到 struct DU 时,编译器将强制您为字段命名。
[<Struct>]
type Result<'T,'TError> =
| Ok of 'T
| Error of 'TError
;;
type Result<'T,'TError> =
-----^^^^^^
error FS3204: If a union type has more than one case and is a struct,
then all fields within the union type must be given unique names.
所以,你可以这样翻译:
[<Struct>]
type Result<'T,'TError> =
| Ok of ok: 'T
| Error of error: 'TError
这将创建一个具有两个字段ok
和error
相应类型的结构,实际上它有点复杂,因为它将创建内部支持字段并将这些名称作为属性呈现给您。有关更多详细信息,请参见Sharplab。
因此,您将能够访问以下属性:
var error = result.error;
推荐阅读
- jenkins - 全局环境变量正在由 Jenkins 扩展电子邮件通知解决
- android - Firebase crud 的 RecyclerView
- python - python - 散点图问题 - 不确定如何为我想要的结果构建图?
- android - 如何将数据处理与 Activity 分开
- react-native - React Native Flatlist ListHeaderComponent 不起作用
- spring - 如何在 Vue 中获取模型属性?
- c - 欧拉 10,素数和到 2000000
- java - 尝试将请求方法作为删除时不支持 GET 方法
- categorical-data - 每当我尝试在我的数据框中编码 categorical_features 时,我都会遇到关键错误
- javascript - reveal.js:ReferenceError:导航器未在全新安装时定义