Как отключить ToString на записях - PullRequest
0 голосов
/ 27 июня 2018

У меня есть тип записи, который часто встречается во вложенной сложной структуре данных. Поскольку тип записи имеет автоматически сгенерированную ToString, ToString моей большей структуры становится путаницей, и меня не волнует строковое представление моей записи.
Поэтому я хочу иметь пустую строку в качестве представления для моей записи. Переопределение ToString, похоже, ничего не делает, использование StructuredFormatDisplay не работает с пустыми строками, поскольку требует ввода в форме "Text {Field} Text". Прямо сейчас у меня есть

[<StructuredFormatDisplay("{}")>]
type MyRecord
    {  5 fields... }

    override __.ToString () = ""

Но это приводит к The method MyRecord.ToString could not be found.

Так, как правильно не иметь строковое представление для типа записи?

1 Ответ

0 голосов
/ 27 июня 2018

Все комментарии содержат правильную информацию о том, как достичь вашей цели. Собрав все воедино, вот что я бы сделал в реальном сценарии, где я хотел, чтобы тип записи всегда имел пустую строку в качестве строкового представления:

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 = 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...