【问题标题】:.NET the following 2 lines give a compile error, why?.NET 以下两行给出编译错误,为什么?
【发布时间】:2012-11-04 09:14:33
【问题描述】:

我在 VB.NET 中的 ASP.NET 中有以下 2 行(对于 C#,只需将世界 'Dim' 替换为 'var')。

 Dim tmpFile = Path.GetTempFileName()
 Dim tmpFileStream = File.OpenWrite(tmpFile)

我在File.OpenWrite(tmpFile) 上收到一条错误消息,提示“重载解析失败,因为没有可访问的“文件”接受此数量的参数”。谁能解释为什么会发生这个错误?我尝试查看文档,但似乎无法弄清楚。谢谢。

【问题讨论】:

  • 有什么理由不想声明类型?
  • 我认为我们需要知道 Path 和 File 是什么......它们的声明没有显示。
  • 但这只有两行......
  • 错字,2 行,不是 3 行。我没有声明类型的原因是因为我只是从 C# 转换它们。转换器没有包含类型,我添加了它们。

标签: .net vb.net


【解决方案1】:

请注意,错误消息指定的是File,而不是OpenWrite。看起来上下文中还有另一个File,其优先级高于System.IO.File。这很可能是错误的来源。尝试在此处使用完全限定名称

Dim tmpFileStream = System.IO.File.OpenWrite(tmpFile)

【讨论】:

    【解决方案2】:

    将以下行添加到代码文件的顶部:

    Imports System.IO
    

    此外,正如 Daniel 所建议的,通过使代码更清晰,指定类型会很有帮助,例如:

    Dim tmpFile As String = Path.GetTempFileName()
    Dim tmpFileStream As FileStream = File.OpenWrite(tmpFile)
    

    在最新版本的 VB 中,它会自动为您推断类型,因此即使您没有指定,它也会使 tmpFile 成为String 类型变量。但是,在旧版本的 VB 中,它只会使其成为基本的 Object 类型,在这种情况下,它将无法确定要使用哪个重载。

    【讨论】:

    • 不要认为这是问题所在。 FilePath 都存在于 System.IO 命名空间中。如果这是问题,那么 OP 也应该在 Path 上出现错误
    猜你喜欢
    • 2013-08-10
    • 1970-01-01
    • 2011-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多