F#中int option转Google.Protobuf.Int32Value的高效实现问询
F# int option 转 Google.Protobuf Int32Value 的高效实现
你可以用更简洁的方式完成转换,避免原代码中冗余的中间步骤与重复判断,以下是两种高效实现方案:
方式一:借助 Option 与 ValueOption 转换函数
let toInt32Value (x: int option) : ValueOption<Google.Protobuf.FSharp.WellKnownTypes.Int32Value> = x |> Option.map (fun v -> { Int32Value.Empty with Value = ValueSome v }) |> ValueOption.ofOption
通过Option.map将Some v映射为已包装好的Int32Value,再用ValueOption.ofOption直接完成option到ValueOption的类型转换,全程仅一次映射和类型转换,逻辑清晰高效。
方式二:直接匹配处理
let toInt32Value (x: int option) : ValueOption<Google.Protobuf.FSharp.WellKnownTypes.Int32Value> = match x with | None -> ValueNone | Some v -> ValueSome { Int32Value.Empty with Value = ValueSome v }
直接针对int option的两种情况生成对应结果,跳过原代码中不必要的中间对象创建与二次判断,执行效率更高,代码也更直观。
这两种实现都能替代原有的生硬写法,同时保持类型安全和序列化所需的结构正确性。
内容的提问来源于stack exchange,提问作者Alan Wayne
相关产品推荐
相关产品推荐

