Если вы не знаете заранее количество или тип параметров, возможно, это означает, что вы не знаете тип делегата, который хотите создать?
Если это так, вы застряли в абсолютно общем случае.
Однако, для большинства распространенных случаев (без параметров ref / out, достаточно мало параметров, чтобы использовать один из существующих типов), вам может не понравиться один из делегатов Func
или Action
. (.NET 4.0 имеет Func
/ Action
типов для огромного количества параметров, так что на самом деле вам нужно беспокоиться только о параметрах out / ref.) Если метод имеет тип возврата, отличный от void, используйте Func
, в противном случае используйте Action
. Определите, какой тип использовать, основываясь на количестве параметров, например,
static readonly Type[] FuncTypes = { typeof(Func),
typeof(Func<>), typeof(Func<,>), typeof(Func<,,>), /* etc */ };
Используйте Type.MakeGenericType
, используя типы параметров и тип возвращаемого значения, чтобы получить правильный тип делегата, тогда Delegate.CreateDelegate
должен работать.
У меня сейчас нет времени на подготовку образца, но дайте мне знать, если вы хотите, чтобы я позже.
Один вопрос: как вы собираетесь использовать этого делегата? Что-то еще нужно знать, как выполнить это, конечно ...