Все комментарии содержат правильную информацию о том, как достичь вашей цели. Собрав все воедино, вот что я бы сделал в реальном сценарии, где я хотел, чтобы тип записи всегда имел пустую строку в качестве строкового представления:
open System
[<StructuredFormatDisplay("{StringDisplay}")>]
type MyRecord =
{
A: int
B: string
C: decimal
D: DateTime
E: Guid
}
member __.StringDisplay = String.Empty
override this.ToString () = this.StringDisplay
Таким образом, независимо от того, какой метод используется для печати записи, или если его метод ToString
используется внешним вызывающим абонентом, представление всегда будет одинаковым:
let record = {A = 3; B = "Test"; C = 5.6M; D = DateTime.Now; E = Guid.NewGuid()}
printfn "Structured Format Display: %A" record
printfn "Implicit ToString Call: %O" record
printfn "Explicit ToString Call: %s" <| record.ToString()
Это печатает:
Structured Format Display:
Implicit ToString Call:
Explicit ToString Call:
Следует иметь в виду, что это даже переопределит способ отображения записи в интерактивном режиме F #. Это означает, что сама оценка записи теперь отображается как:
val record : MyRecord =