Non è possibile utilizzare le esistenti Action
delegati con params
, ma è possibile dichiarare il proprio delegato in questo modo:
public delegate void ParamsAction(params object[] arguments)
Poi:
// Note that this doesn't have to have params, but it can do
public void Foo(object[] args)
{
// Whatever
}
...
ParamsAction action = Foo;
action("a", 10, 20, "b");
Naturalmente si possibile creare unAction<object[]>
per il metodo esistente, ma si perde l'aspetto params
, in quanto non dichiarato in Action<T>
. Così, per esempio:
public static void Foo(params object[] x)
{
}
...
Action<object[]> func = Foo;
func("a", 10, 20, "b"); // Invalid
func(new object[] { "a", 10, 20, "b" }); // Valid
Quindi, se siete chiamando il delegato dal codice che vuole utilizzare params
, è necessario un tipo delegato che comprende che nella dichiarazione (come per la prima parte). Se si desidera creare un delegato che accetta un numero object[]
, è possibile creare un'istanzaAction<object[]>
utilizzando un metodo che ha params
nella sua firma - è solo un modificatore, in modo efficace.
fonte
2014-09-05 16:44:46
No, stranamente questo è stato discusso mezz'ora fa! http://stackoverflow.com/a/25689676/1663001 – DavidG
http://stackoverflow.com/questions/4059624/can-i-use-params-in-action-or-func-delegates –