Могу ли я создать делегат для методаInfo.Invoke? [Дубликат]

Рассмотрим ограничения различных методов Load * . Из MSDN docs ...

LoadFile не загружает файлы в контекст LoadFrom и не разрешает зависимости, используя путь загрузки, как это делает метод LoadFrom.

Более подробную информацию о контекстах загрузки можно найти в документах LoadFrom .

29
задан nawfal 14 June 2014 в 19:44
поделиться

2 ответа

Вам нужно вызвать некоторую форму Delegate.CreateDelegate () , в зависимости от того, является ли рассматриваемый метод статическим или экземплярным методом.

21
ответ дан Sachin Joseph 15 August 2018 в 18:10
поделиться
  • 1
    Спасибо nkohari, разработал именно то, что мне нужно. – Ty. 2 June 2009 в 18:19
private static Delegate CreateDelegate(this MethodInfo methodInfo, object target) {
    Func<Type[], Type> getType;
    var isAction = methodInfo.ReturnType.Equals((typeof(void)));
    var types = methodInfo.GetParameters().Select(p => p.ParameterType);

    if (isAction) {
        getType = Expression.GetActionType;
    }
    else {
        getType = Expression.GetFuncType;
        types = types.Concat(new[] { methodInfo.ReturnType });
    }

    if (methodInfo.IsStatic) {
        return Delegate.CreateDelegate(getType(types.ToArray()), methodInfo);
    }

    return Delegate.CreateDelegate(getType(types.ToArray()), target, methodInfo.Name);
}
11
ответ дан Sagi 15 August 2018 в 18:10
поделиться
  • 1
    Это должен быть принятый ответ: он решает вопрос напрямую – Graviton 15 July 2017 в 05:04
  • 2
    @Graviton Зависит от того, есть ли у вас подпись метода как тип Delegate или нет. В этом случае OP, по-видимому, указывает, что он может предварительно предположить MyDelegate, и в этом случае Nate и решение, включенное в OP, являются лучшими. Это, с другой стороны, является отличным ответом на вопрос other , что и нужно делать, если у вас нет доступа к соответствующему типу Delegate (т. Е. Обычно вы получили MethodInfo из-за синего цвета по имени) ... но для создания делегата требуется определенно такой тип делегата (несколько пресловутая проблема [цыпленка и яйца] .NET). – Glenn Slayden 15 July 2017 в 12:24
  • 3
Другие вопросы по тегам:

Похожие вопросы: