Как я могу дополнить целое число, чтобы убедиться, что оно всегда состоит из трех цифр в vb.net на уровне DTO?

У меня есть поле в моем DTO, которое является целым числом. В базе данных есть некоторые числа, хранящиеся как 1, 2, 101 и т. Д. Я хочу убедиться, что в системе они всегда отображаются в виде трех цифр, например 001, 002. Это не работает, и я не могу понять, как это сделать... какие-нибудь идеи там? Вот фрагмент моего DTO:

Private mArea As Integer
<Display(name:="Area")> _
<DisplayFormat(DataformatString:="{0:000}")> _
Public Property Area() As Integer
    Get
        Return mArea
    End Get
    Set(ByVal value As Integer)
        mArea = value
    End Set
End Property

3 ответа

Атрибут DisplayFormat - это просто информация. Некоторые элементы управления пользовательского интерфейса (например, некоторые элементы управления WPF) используют его и уважают. Это просто подсказка. Не меняется, как хранится целое число. Целое число сохраняется как двоичное значение. Он не имеет собственного формата, ни начальных, ни конечных нулей (в некоторой степени имеет десятичное число).

Чтобы достичь своей цели, вы должны отформатировать каждый вывод поля, которое вы делаете в своем приложении, или использовать элементы управления пользовательского интерфейса, которые соответствуют атрибуту DisplayFormat.

Вы можете рассматривать значение как строку.

Dim areaString As String = Strings.Right("000" & area.ToString, 3)

Во-первых, VB автоматически создаст для вас вспомогательное поле, поэтому вы сможете упростить существующее объявление свойства следующим образом:

<Display(name:="Area"), DisplayFormat(DataformatString:="{0:000}")>
Public Property Area As Integer

Как уже упоминалось, атрибуты свойства могут или не могут быть применимы к контейнеру и, следовательно, могут не соблюдаться. Что-то, что я сделал в других проектах, - это создание шаблонного класса Value, такого как:

Public MustInherit Class Value(Of T)
    Public Overridable Property Value As T
    Public MustOverride ReadOnly Property DisplayValue As String
End Class

Public Class AreaValue
    Inherits Value(Of Integer)

    Public Overrides ReadOnly Property DisplayValue As String
        Get
            Return Format(Value, "000")
        End Get
    End Property
End Class

Тогда у вас есть полный контроль, чтобы различать то, что отображается и что хранится.

В противном случае, вы можете просто ввести в качестве предисловия каждое местоположение, которое вы отображаете как:

Format(Area,"000")

Или что-то подобное. Вероятно, лучше всего абстрагироваться от намерения отделить отображаемые значения от сохраненных значений.

Другие вопросы по тегам