Вызовите метод с параметрами, используя Reflection - PullRequest
2 голосов
/ 23 октября 2019

Я пытаюсь вызвать метод с параметрами, используя отражение. Он возвращает System.Reflection.TargetParameterCountException

Это происходит только с методами, имеющими ключевое слово params в параметрах метода

Public static dynamic Function(JObject data, string PathFunction) {            

        string MethodName = "MergeFields";
        string FunctionsNamespace ="Test.Functions";

        Object[] parameterArray = {"274-84-3068","5","1","Hugenberg","4","0"}

        // Call Static class functions 
        Type type = Type.GetType(FunctionsNamespace);            
        Object obj = Activator.CreateInstance(type);            
        MethodInfo methodInfo = type.GetMethod(MethodName);            
        object st =  methodInfo.Invoke(obj, parameterArray);
        return st;

    }



     public static string MergeFields(params string[] data)
    {
        StringBuilder sb = new StringBuilder();
       // code to be processed
        return sb.ToString();
    }

1 Ответ

3 голосов
/ 23 октября 2019

Если у вас есть метод:

public static string MergeFields(params string[] data)

и вы вызываете:

MergeFields("a", "b", "c");

, компилятор тайно превращает это в:

MergeFields(new string[] { "a", "b", "c" });

Однакокогда вы используете отражение, вы не получите помощь компилятора здесь! Вам нужно будет создать этот строковый массив самостоятельно:

object[] parameterArray = new object[] { new string[] { "274-84-3068", "5", "1", "Hugenberg", "4", "0" } };

Здесь мы собираемся передать один параметр в MergeFields, и этот параметр является массивом строк.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...