下面我试着做一个例子:
Public Function UserData(ByVal UserDN As String) As DataTable
Dim myTable As DataTable = UserData_Table()
Dim dr As DataRow
dr = myTable.NewRow()
SplitOU2(UserDN, dr("OUDN"), dr("Organisation"), New Object)
dr("UserDN") = UserDN
myTable.Rows.Add(dr)
Return myTable
End Function下面是被调用的方法:
Friend Sub SplitOU2(ByVal inDN As String, ByRef OUDN As Object, ByRef Organisation As Object, ByRef VerksamhetTyp As Object)通过这样做,我可以跳过在这个例子中声明“无用的”变量Dim VerksamhetTyp as Object = ""。
也许它看起来有点丑陋,但必须声明未使用的变量也可能会让人感到困惑。
发布于 2009-09-07 16:08:14
摘要:检查方法是否真的需要这些参数为ByRef。还要检查你是否真的不关心它对参数做的任何事情。经过严格的检查后,这样做是可以的-在CLR方面不会发生任何“坏”的事情,因为这只是一个隐藏在引擎盖下的编译器技巧。
嗯,VB (不像C#)可以让你做到这一点。在幕后,它有效地创建了一个新变量并通过引用传递它-毕竟,它必须这样做才能正确调用方法。然而,我想说这通常是一个坏主意。ByRef的要点是在方法中设置好值之后再使用它。
首先,您真的需要所有这些参数都是ByRef吗?如果你发现自己为一个特定的方法做了很多这样的事情,你总是可以编写一个包装器方法来调用原来的方法,但是没有ByRef参数本身。
(我通常发现,带有大量ByRef参数的方法要么表示不了解.NET中的引用类型,要么表示参数应该封装在它们自己的类型中。)
话虽如此,在调用方法之后忽略ByRef参数的值并不总是不正确的。例如,如果您只想知道是否可以将某些文本解析为整数,那么使用Int32.TryParse是合理的-但只有返回值对您有用。
发布于 2009-09-07 16:45:20
我之所以考虑使用这个方法,是因为该方法有更多的参数,并且不同的操作重载获得相同的签名…。它工作的事实是相当有趣的,我偶然成为了awaraeóff…
https://stackoverflow.com/questions/1390001
复制相似问题