0

我收到可选参数的错误,它说“需要常量表达式”

我该如何解决这个问题?

Private Function Write_Text_To_File(ByVal Text_File As String, _
                              ByVal Text As String, _
                              ByVal Append_Text As Boolean, _
                              Optional Encoding As System.Text.Encoding = System.Text.Encoding.Default) As Boolean

    Try : Using TextFile As New IO.StreamWriter(Text_File, Append_Text, Encoding) : TextFile.WriteLine(Text) : End Using
        Return True
    Catch ex As Exception
        'Return False
        Throw New Exception(ex.Message)
    End Try

End Function

更新:

解决方案

#Region " Write Text to File "

' [ Write Text to File Function ]
'
' // By Elektro H@cker
'
' Examples :
'
' Write_Text_To_File("C:\Test.txt", "Text", False)
' Write_Text_To_File("C:\Test.txt", "Text", True, System.Text.Encoding.UTF8)

Private Function Write_Text_To_File(ByVal Text_File As String, _
                              ByVal Text As String, _
                              ByVal Append_Text As Boolean, _
                              Optional Encoding As System.Text.Encoding = Nothing) As Boolean
    Try
        If Encoding Is Nothing Then Encoding = System.Text.Encoding.Default
        Using TextFile As New IO.StreamWriter(Text_File, Append_Text, Encoding) : TextFile.WriteLine(Text) : End Using
        Return True
    Catch ex As Exception
        'Return False
        Throw New Exception(ex.Message)
    End Try

End Function

#End Region
4

1 回答 1

2

我该如何解决这个问题?

好吧,您根本不能Encoding.Default其用作默认参数值。

您可以做的是Nothing用作默认参数值,并且只需:

If Encoding Is Nothing Then
    Encoding = System.Text.Encoding.Default
End If

请注意,这确实意味着您不能使用Nothing其他含义。

另一种选择是只使用重载 - 提供一个没有编码参数的版本,它只是调用带有编码参数的版本,传入Encoding.Default.

另外两点需要注意:

  • 您的参数名称不遵循.NET 命名约定;他们应该是驼峰式的
  • Encoding.Default通常是一个不好的默认使用(并且命名不佳)。Encoding.UTF8如果您不指定一个,.NET 中的几乎所有内容实际上都用作默认编码;我会敦促你效仿。
于 2013-04-16T08:35:09.723 回答