f# - 在 C# 中使用 F# 选项。例如FSharpOption<字典<Guid, MembershipUser>>

标签 f# c#-to-f# option-type

我想知道是否有一种方法可以减少处理从 F# 返回到 C# 的选项类型的麻烦。例如:

 var result = TheOneCache.Get<Dictionary<Guid, MembershipUser>>(TheOneCache.EntryType.SQL, USERNAME_DICTIONARY);

 if (FSharpOption<Dictionary<Guid, MembershipUser>>.get_IsSome(result))
 {
     result.Value.Remove(membershipid);
 }

我很乐意不必提供 <Dictionary<Guid, MembershipUser>>每次。有什么办法可以改善这种情况吗?

最佳答案

@MiMo 在评论中为我指出了正确的方向。如果其他人遇到此问题,请使用 jaredpar' blog 中的以下技巧将为您包装这些调用,以便您只需调用 FSharpOption.isSome(x)

public static class FSharpOption {
  public static FSharpOption<T> Create<T>(T value) {
    return new FSharpOption<T>(value);
  }
  public static bool IsSome<T>(this FSharpOption<T> opt) {
    return FSharpOption<T>.get_IsSome(opt);
  }
  public static bool IsNone<T>(this FSharpOption<T> opt) {
    return FSharpOption<T>.get_IsNone(opt);
  }
}

关于f# - 在 C# 中使用 F# 选项。例如FSharpOption<字典<Guid, MembershipUser>>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35163327/

相关文章:

f# - 如何在F#交互中使用Span?

f# - C# 到 F# 转换公共(public)部分类设备 : MarshalByRefObject

f# - 在 F# 中切片二维数组但类似于 Matlab?

快速,可选展开,如果条件反转

swift - flatMap API 合约如何将可选输入转换为非可选结果?

.net - MailboxProcessor 在 Finalize 期间崩溃

f# - 如何用列表更新嵌套记录结构

list - F# 交错 2 列表

F# 事务管理

c++ - 为什么在 std::Optional 中调用虚拟类的虚拟方法会生成对基方法的调用,而不是重写?