Как я могу использовать CodeDom для создания десятичной константы? - PullRequest
1 голос
/ 12 марта 2010

У меня есть эта функция в моем генераторе.

    Private Sub AddBoundedValue(ByVal boundedValue As Object, ByVal type As CodeTypeDeclaration, ByVal numericType As Type, name As String)

        If boundedValue IsNot Nothing Then

            Dim constant As New CodeMemberField(numericType, name)
            constant.Attributes = MemberAttributes.Const Or MemberAttributes.Public
            constant.InitExpression = New CodePrimitiveExpression(Convert.ChangeType(boundedValue, numericType))
            type.Members.Add(constant)

        End If

    End Sub

Если разработчик передает десятичную дробь для параметра "boundedValue" и десятичный тип для параметра "numericType", генерируется следующий код.

Public Const DollarAmountMaximumValue As Decimal = 100000

Несмотря на то, что тип данных, передаваемый в конструктор объекта CodePrimitiveExpression, является десятичным, сгенерированный код является целым числом, которое неявно преобразуется и сохраняется в десятичной переменной. Есть ли способ получить его сгенерировать с "D" после числа, как в:

Public Const DollarAmountMaximumValue As Decimal = 100000D

Спасибо.

1 Ответ

0 голосов
/ 12 марта 2010

Ну, я не доволен этим решением, но если у кого-то нет лучшего, мне придется его использовать.

Private Sub AddBoundedValue(ByVal boundedValue As Object, ByVal type As CodeTypeDeclaration, ByVal numericType As Type, name As String)

    If boundedValue IsNot Nothing Then

        Dim constant As New CodeMemberField(numericType, name)
        constant.Attributes = MemberAttributes.Const Or MemberAttributes.Public
        If numericType Is GetType(Decimal) AndAlso [I detect if the language is VB.NET here] Then
            constant.InitExpression = New CodeSnippetExpression(boundedValue.ToString & "D")
        Else
            constant.InitExpression = New CodePrimitiveExpression(Convert.ChangeType(boundedValue, numericType))
        End If
        type.Members.Add(constant)

    End If

End Sub
...