F# 的 C# public 成员初始值设定项是否有任何替代方案?
Is there any alternative to C#'s public member initializer for F#?
在 C# 中,可以分配 public 个成员来代替构造函数调用:
options.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "preferred_username" }
为了达到同样的效果,我写了下面的F#代码:
options.TokenValidationParameters <- (new TokenValidationParameters()) |> fun it -> (it.NameClaimType <- "preferred_username"; it)
不过一点都不好看。
有没有更好的方法来做到这一点?理想的解决方案可能是像 kotlin 中的 apply
?
这样的函数
感谢任何帮助。
如评论中所述,您可以使用对象初始化语法指定参数:
options.TokenValidationParameters <-
new TokenValidationParameters( NameClaimType = "preferred_username")
以上绝对是最好的方法。但是,即使您需要更复杂的逻辑,也没有必要使用笨拙的管道和 fun
构造在一行中构造对象。只定义一个局部变量没有错:
let tokParams = new TokenValidationParameters()
tokParams.NameClaimType <- "preferred_username"
options.TokenValidationParameters <- tokParams
如果你想限制 tokParams
变量的范围,你可以这样做:
options.TokenValidationParameters <-
let tokParams = new TokenValidationParameters()
tokParams.NameClaimType <- "preferred_username"
tokParams
这也有效,因为 F# 块被视为表达式。在这种特殊情况下您不需要这样做,但了解它可能会有所帮助 - 并且它可以让您避免笨拙的管道。
在 C# 中,可以分配 public 个成员来代替构造函数调用:
options.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "preferred_username" }
为了达到同样的效果,我写了下面的F#代码:
options.TokenValidationParameters <- (new TokenValidationParameters()) |> fun it -> (it.NameClaimType <- "preferred_username"; it)
不过一点都不好看。
有没有更好的方法来做到这一点?理想的解决方案可能是像 kotlin 中的 apply
?
感谢任何帮助。
如评论中所述,您可以使用对象初始化语法指定参数:
options.TokenValidationParameters <-
new TokenValidationParameters( NameClaimType = "preferred_username")
以上绝对是最好的方法。但是,即使您需要更复杂的逻辑,也没有必要使用笨拙的管道和 fun
构造在一行中构造对象。只定义一个局部变量没有错:
let tokParams = new TokenValidationParameters()
tokParams.NameClaimType <- "preferred_username"
options.TokenValidationParameters <- tokParams
如果你想限制 tokParams
变量的范围,你可以这样做:
options.TokenValidationParameters <-
let tokParams = new TokenValidationParameters()
tokParams.NameClaimType <- "preferred_username"
tokParams
这也有效,因为 F# 块被视为表达式。在这种特殊情况下您不需要这样做,但了解它可能会有所帮助 - 并且它可以让您避免笨拙的管道。