【问题标题】:Option Strict On disallows implicit conversions from 'String ' to 'Char' VB.NETOption Strict On 禁止从 'String' 到 'Char' VB.NET 的隐式转换
【发布时间】:2020-05-10 12:13:47
【问题描述】:

我正在使用Option Strict On(有时希望我不是!)但是有一段代码可以在没有它但没有它的情况下按我想要的方式工作。

我想应该很简单,但我在这里找不到答案。

我与Option Strict Off 一起使用的代码是这样的:

If returnedString.Contains(".exe ") And returnvalues.Count = 0 Then
  Dim x As Integer = 0
  For Each entry In returnedString.Split(".exe ")
    If (entry.Length > 0) And x = 0 Then
      returnvalues.Add(entry & ".exe")
      x = x + 1
    End If
  Next
End If

returnedString 是,例如:

C:\Program Files (x86)\Whatever\Whatever.exe

C:\Program Files (x86)\Whatever\Whatever

如果Option Strictoff,则在条目中返回,这就是我想要的。

但是,如果我使用 Visual Studio 的添加演员的建议,则以下内容不起作用:

For Each entry As String In returnedString.Split(CType(".exe ", Char()))

返回的第一个条目是C:\Program,这大概是因为它找到了字符' ';我不希望它检查每个字符,我希望它像 Option Strictoff 时那样检查整个字符串,但我无法解决。

我尝试了.ToCharArray,但这确实起到了同样的作用。

【问题讨论】:

  • Contains(".exe") 后面多了一个空格是真的需要还是错字?
  • 是的,您的代码是意外运行的。它没有按照您的想法做,在这种特定情况下,这无关紧要,这纯粹是运气。您实际上想要实现的是什么,因为该代码看起来很奇怪,而且我非常有信心有更好的方法来做您想做的任何事情?为什么要使用 Split 删除 String 末尾的任何字符,更不用说文件路径中的扩展名了?
  • 关于Option Strict On,它真正做的只是强迫你使用你的代码所期望的类型的值。如果您甚至收到与Option Strict 相关的错误,只需查看您的代码需要什么类型以及您正在使用什么类型。在这种情况下,如果您阅读了您正在使用的Split 重载的文档,那么您会看到它需要Char,而不是String。如果您进一步阅读以了解哪些重载可用,您会看到还有其他重载以及哪些接受String 分隔符。

标签: vb.net option-strict


【解决方案1】:

请继续使用Option Strict On。这很烦人,但它会为您节省很多时间。

针对您的问题:

这是因为当您启用Option Strict On 时,编译器不再允许从您的字符串中获取第一个字符并将其用作分隔符。因为string.Split 没有重载,它接受 just 一个字符串,所以它会抱怨尝试进行无效转换。

如果要使用字符串作为分隔符,则需要传递一个字符串数组作为第一个参数,第二个类型为StringSplitOptions 的参数是必需的。

修复它非常简单。只需将行更改为:

For Each entry In returnedString.Split({".exe"}, StringSplitOptions.None)

【讨论】:

  • 非常感谢您的所有 cmets 和史蒂夫,非常感谢您的回答有效!这个空间是经过深思熟虑的——我想要做的(实际上非​​常成功)是撤回与文件数据的不同位有关的注册表项。因此,在这种情况下,例如,它正在查看 HKLM\SW\MS\Win\CV\Run 中的 Run 值 - 问题是,在不同的计算机上,这可能会被严重格式化以以一致的方式返回。跨度>
  • 这里返回的项目是:"C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IMSS\PIconStartup.exe" "C:\Program Files (x86 )\Intel\Intel(R) Management Engine Components\IMSS\PrivacyIconClient.exe" 60 - 所以您希望看到为什么我需要拆分而不是先获取文件命令。再次感谢您的所有帮助。
猜你喜欢
  • 1970-01-01
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多