Option Strict On 不允许从 'String' 到 'Double' 的隐式转换

Option Strict On disallows implicit conversions from 'String' to 'Double'

1- 创建一个 excel 文件,如 C:\MyFolder\Book1.xlsx.

2- 运行 下面的代码,看看代码运行良好。

Option Strict Off
Imports Microsoft.Office.Interop

Public Class Form1
Private Sub Form1_Load(sender As Object, e As System.EventArgs) Handles Me.Load

    DateTimePicker1.Value = CDate(CStr(System.DateTime.Now.AddDays(-System.DateTime.Now.Day)))

    Dim xlApp As New Excel.Application
    xlApp.WindowState = Excel.XlWindowState.xlMinimized

    Dim wb1 As Excel.Workbook
    wb1 = xlApp.Workbooks.Open("C:\MyFolder\Book1.xlsx")

    Dim ws1 = CType(wb1.Sheets(1), Excel.Worksheet)

    With ws1
        .Range("A1").Value = "2017"
        If .Range("A1").Value.ToString <> CDbl(DateTimePicker1.Value.ToString("yyyy")) Then
            MsgBox("error")
        End If
    End With

End Sub

End Class

5- 打开 Option Strict 时出现错误。

您想要将 ws.Range("A1").Value 的字符串表示与 DateTimePicker1.Value 的字符串表示进行比较。

DateTimePicker1.ValueDouble 的转换似乎很奇怪。这就是编译器显示错误的原因,因为代码

.Range("A1").Value.ToString <> CDbl(DateTimePicker1.Value.ToString("yyyy"))

将尝试将类型 string 的值与类型 double 的值进行比较,这在 Strict Option On 中是不允许的。

简单比较字符串而不转换为double

If .Range("A1").Value.ToString() <> DateTimePicker1.Value.ToString("yyyy") Then
    MsgBox("error")
End If