gpt4 book ai didi

C# 和 F# 转换 - 特别是 'as' 关键字

转载 作者:IT王子 更新时间:2023-10-29 04:21:16 25 4
gpt4 key购买 nike

在 C# 中我可以这样做:

var castValue = inputValue as Type1

在 F# 中,我可以:

let staticValue = inputValue :> Type1
let dynamicValue = inputValue :?> Type1

但它们都不等同于 C# 的关键字 as

我想我需要为 F# 中的等价物做一个匹配表达式

match inputValue with
| :? Type1 as type1Value -> type1Value
| _ -> null

这是正确的吗?

最佳答案

据我所知,F# 没有任何等效于 C# as 的内置运算符所以你需要写一些更复杂的表达式。使用 match 替代您的代码, 你也可以使用 if ,因为运算符 :?可以像is一样使用在 C# 中:

let res = if (inputValue :? Type1) then inputValue :?> Type1 else null

您当然可以编写一个函数来封装此行为(通过编写一个简单的通用函数,该函数采用 Object 并将其转换为指定的通用类型参数):

let castAs<'T when 'T : null> (o:obj) = 
match o with
| :? 'T as res -> res
| _ -> null

此实现返回 null , 所以它要求类型参数有 null作为适当的值(或者,您可以使用 Unchecked.defaultof<'T> ,它等效于 C# 中的 default(T))。现在你可以写:

let res = castAs<Type1>(inputValue)

关于C# 和 F# 转换 - 特别是 'as' 关键字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2361851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com