2012-08-28 97 views
1

我有以下代码:如何将对象数组作为单个参数传递给方法?

public class MyClass 
{ 
    private Delegate m_action; 
    public object[] m_args; 

    public MyClass() 
    { 

    } 

    public MyClass(Delegate action, params object[] args) 
    { 
     m_args = args; 
     m_action = action; 
    } 

    public void Execute() 
    { 
     m_action.DynamicInvoke(m_args); 
    } 
} 

这种方法的问题是,m_args是对象本身,其内容不被压平成单个PARAMS条目。我怎样才能解决这个问题?

+3

如何解决什么问题?我看不到任何问题。 –

+2

请发布一个可重现的小例子。 – asawyer

+2

Params关键字在我的测试中展平了参数。 – itsme86

回答

4

我认为你错了。 params似乎按预期工作。这里显示了它的工作原理简单的例子:

static void f(params object[] x) 
{ 
    Console.WriteLine(x.Length); 
} 

public static void Main() 
{ 
    object[] x = { 1, 2 }; 
    f(x); 
} 

结果:

2 

看到它联机工作:ideone

0

这个工作就像你认为它会。

public class MyClass 
{ 
    private Delegate m_action; 
    public object[] m_args; 

    public MyClass() 
    { 
    } 

    public MyClass(Delegate action , params object[] args) 
    { 
    m_args = args; 
    m_action = action; 
    } 

    public void Execute() 
    { 
    m_action.DynamicInvoke(m_args); 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
    Type  tSelf   = typeof(Program) ; 
    MethodInfo mi    = tSelf.GetMethod("FooBar") ; 
    Delegate methodDelegate = Delegate.CreateDelegate(typeof(Action<int,int,int>) , mi) ; 
    MyClass instance  = new MyClass(methodDelegate , 101 , 102 , 103) ; 

    instance.Execute() ; 

    return; 
    } 

    public static void FooBar(int x , int y , int z) 
    { 
    Console.WriteLine("x:{0}, y:{1}, z:{2}" , x , y , z) ; 
    return ; 
    } 

} 
相关问题