将方法参数转换为数组

问题描述:

是否有可以将方法参数转换为数组的Visual Basic.NET方法?将方法参数转换为数组

例如,而不是:

Function functionName(param1 as object, param2 as object) as object 
ArrayName = {param1, param2} 

,你可以这样做:

Function functionName(param1 as object, param2 as object) as object 
ArrayName = MethodThatGetsAllFunctionParams 

只是好奇真的。

+0

你究竟想达到什么目的?对于我来说,没有足够的细节可以说明。将它们转换为数组意味着什么? – 2011-04-17 15:44:15

+0

看看@ http://*.com/questions/3288597/is-there-a-way-to-get-an-array-of-the-arguments-passed-to-a-method – 2011-04-17 16:14:13

没有办法做到这一点。该语言本身不允许。您可以使用反射来获取执行的当前执行方法StackFrame。但即使如此,it’s still impossible来检索参数值。

唯一的解决方案是通过在方法调用中引入点削减来“修补”应用程序。相关答案提到了这种可能性。

看看ParamArrays。我认为这解决了你的要求?

http://msdn.microsoft.com/en-us/library/538f81ec%28v=VS.100%29.aspx

编辑:

你可以使用当前的函数签名

Public Class CustomCollection(Of T) 
    Inherits System.Collections.Generic.List(Of T) 

    Sub New(param1 As T, param2 As T) 
     MyBase.New() 
     MyBase.Add(param1) 
     MyBase.Add(param2) 
    End Sub 
End Class 

初始化自定义集合,然后调用使用

Dim result = functionName(New CustomCollection(Of Object)(param1, param2)) 

函数签名的功能会改为:

Public Function functionName(ByVal args As CustomCollection(Of Object)) As String 
+0

不,我不希望向方法发送未指定数量的参数。 – burntsugar 2011-04-17 16:26:15

+0

请注意,如果您愿意,可以从上面删除泛型并将其全部更改为Object。只是给你一些关于重载的选项。 – Smudge202 2011-04-19 11:32:36