Как я могу дополнить целое число, чтобы убедиться, что оно всегда состоит из трех цифр в 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")
Или что-то подобное. Вероятно, лучше всего абстрагироваться от намерения отделить отображаемые значения от сохраненных значений.