nie można użyć istniejących Action
delegatów z params
, ale można zadeklarować własną delegat tamtędy:
public delegate void ParamsAction(params object[] arguments)
wówczas:
// 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");
Oczywiście, że może tworzenia Action<object[]>
dla istniejącej metody - ale tracisz ten aspekt, ponieważ nie został zadeklarowany w Action<T>
. Tak na przykład:
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
więc jeśli jesteś wywołującego delegat z kodem, który chce korzystać params
, trzeba typ delegata, który obejmuje, że w deklaracji (zgodnie z pierwszej części). Jeśli chcesz utworzyć delegata, który akceptuje numer object[]
, możesz utworzyć instancję o numerze z Action<object[]>
przy użyciu metody, która ma podpis w postaci params
- jest to po prostu modyfikator.
No, dosyć zabawnie to zostało omówione pół godziny temu! http://stackoverflow.com/a/25689676/1663001 – DavidG
http://stackoverflow.com/questions/4059624/can-i-use-params-in-action-lub-func-delegates –