2011-05-14 61 views
2

我有这样的功能:VB奇变量使用问题,因为文件路径

Function WriteTextToFile(ByVal data) 
    Dim file As New System.IO.StreamWriter("E:\storage.txt") 
    file.WriteLine(data) 
    file.Close() 
End Function 

我一直在努力,以使文件路径成为一个变量,我可以通过允许多个存储的文件进行调整。事情是这样的:

Function AppendTextToFile(ByVal data, ByVal path) 

     Dim file As New System.IO.StreamWriter(path, True) 
     file.WriteLine(data) 
     file.Close() 

    End Function 

但同时功能1部作品,功能2不 - 我得到这个错误无益:

Overload resolution failed because no accessible 'New' can be called without a narrowing conversion: 
    'Public Sub New(path As String)': Argument matching parameter 'path' narrows from 'Object' to 'String'. 
    'Public Sub New(stream As System.IO.Stream)': Argument matching parameter 'stream' narrows from 'Object' to 'System.IO.Stream'. C:\Users\films ratings\films ratings\Form1.vb 

我通常在PHP中工作,我从来没有见过的错误这种性质之前。这是什么意思,我可以重写函数来获得我想要的?

+0

干杯!如果我可以的话,会接受它:) – YsoL8 2011-05-14 10:34:56

+0

这个错误对我来说似乎相当有用......你不能隐式地将一个Object类型的参数转换(或缩小)为String类型的参数,所以第一个重载是数出来了。而且你不能隐式地将类型为'Object'的参数转换为'System.IO.Stream'类型之一,所以第二次过载被计数出来。现在没有人可以选择! – 2011-05-14 10:42:56

+0

我从来没有处理任何种类的重载之前,所以... – YsoL8 2011-05-14 11:03:56

回答

4

声明变量path作为String类型,你会没事的。

由于您将路径参数声明为Object(这是您未指定的情况下的默认值),因此编译器无法确定应使用构造函数的哪些重载。

相反,你应该声明你的第二个功能是这样的:

Function AppendTextToFile(ByVal data, ByVal path As String) 
+0

关于它可能没有“可能”。如果您未在方法声明中指定特定类型,则Object是默认值。 – 2011-05-14 10:37:55

+0

@Cody Gray:是的,我的眼睛跳过了函数声明的行,因为它之前没有语法颜色。 “可能”是指我错过了宣言。 – 2011-05-14 10:56:16

+0

啊,是的。我忘记了我在这样做之间修改了问题格式并留下了评论。 ;-) 别担心。 – 2011-05-14 10:57:00

4

你传递的path(和data)参数为对象。通过 只需 总是强烈键入变量,这里的错误将消失。

Function AppendTextToFile(ByVal data As String, ByVal path As String) 

    Dim file As New System.IO.StreamWriter(path, True) 
    file.WriteLine(data) 
    file.Close() 

End Function 
+1

+1仅仅为了重申,**总是**在可能的时候更喜欢强烈的打字。这里的VB.NET与PHP不一样。 – 2011-05-14 10:39:29

+0

感谢科迪,更新以反映您的评论:) – Tom 2011-05-14 10:42:00