в C# публичные члены могут быть назначены вместо вызова конструктора:
options.TokenValidationParameters = new TokenValidationParameters { NameClaimType = "preferred_username" }
Для достижения того же эффекта я написал следующий код F#:
options.TokenValidationParameters <- (new TokenValidationParameters()) |> fun it -> (it.NameClaimType <- "preferred_username"; it)
Однако выглядит это совсем не красиво.
Есть ли лучший способ сделать это? Идеальным решением может быть функция вроде apply
в kotlin?
Любая помощь приветствуется.
@ JL0PD Большое спасибо! Это именно то решение, которое я хочу!
Как упоминалось в комментариях, вы можете указать параметры, используя синтаксис инициализации объекта:
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# обрабатывается как выражение. Вам не нужно делать это в данном конкретном случае, но это может быть полезно знать, и это позволит вам избежать неудобных конвейеров.
new TokenValidationParameters( NameClaimType = "preferred_username")
docs.microsoft.com/en-us/dotnet/fsharp/language-reference/…