【问题标题】:Conditional Definition with Using in VB.net在 VB.net 中使用条件定义
【发布时间】:2017-06-20 20:23:47
【问题描述】:

我想避免重复代码以有条件地写入日志文件,如下所示。 VB.net有更好的解决方案吗?

If Not System.IO.File.Exists(log_file_address) Then
    Using log_file_stream as New System.IO.StreamWriter(log_file_address)
        log_file_stream.Writeline (current_time_string)
        log_file_stream.Writeline (" ")
        log_file_stream.Writeline (log_message)
        log_file_stream.Close()
    End Using
Else
    Using log_file_stream As IO.StreamWriter = System.IO.File.AppendText(log_file_address)
        log_file_stream.Writeline (current_time_string)
        log_file_stream.Writeline (" ")
        log_file_stream.Writeline (log_message)
        log_file_stream.Close()
    End Using
End If

可能是这样的:

Using log_file_stream as If(System.IO.File.Exists(log_file_address), _
                            System.IO.File.AppendText(log_file_address), _
                            New System.IO.StreamWriter(log_file_address))
    log_file_stream.Writeline (current_time_string)
    log_file_stream.Writeline (" ")
    log_file_stream.Writeline (log_message)
    log_file_stream.Close()
End Using

【问题讨论】:

    标签: vb.net initialization ternary-operator


    【解决方案1】:

    StreamWriter 的构造函数有一个overload,其参数采用文件路径字符串和布尔开关来指示它是否应该过度附加。注意,如果文件不存在,则该参数无效,构造函数会创建一个新文件。

    所以更改并让构造函数负责检查文件是否存在。

    Using log_file_stream as New System.IO.StreamWriter(log_file_address, True)
        'Write to log file...
    End Using
    

    【讨论】:

    • 只需将True 替换为System.IO.File.Exists(log_file_address)
    • 谢谢,非常干净,并且很好地洞察了在哪里寻找这些问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-21
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多