Не может динамически вызывать метод в c# - PullRequest
0 голосов
/ 06 января 2020

У меня есть класс, метод которого я хочу вызывать динамически. Но я не в состоянии это сделать. Я что-то пропустил?

public class P_WATER
    {
        private int[] jDS = new int[20];
        private int n;

        public int[] JDS { get => jDS; set => jDS = value; }
        public int N { get => n; set => n = value; }

        public void P_WATER1()
        {
          //something...
        }
    }
public class Test
{

    P_WATER P_WATERState1 = new P_WATER();
    PLibStateList.Add(P_WATERState1);

    // Try to invoke methods from each objects.
    foreach (object item in StateUtility.PLibStateList)
    {
        Type objType= item.GetType();
        objType.InvokeMember(objType.Name + "1", BindingFlags.InvokeMethod, null, item, null);
    }
}

При попытке вызвать метод я получаю следующее исключение:

Не удалось загрузить файл или сборку 'System.Runtime, Version = 4.2.1.0 , Культура = нейтральная, PublicKeyToken = b03f5f7f11d50a3a 'или одна из ее зависимостей. Система не может найти указанный файл.

Но моя сборка тесно связана с проектом.

1 Ответ

0 голосов
/ 09 января 2020

Я попробовал тот же код (с небольшими изменениями) в VS2019 (Консольное приложение) и работал просто отлично ... странно ... проверите операторы использования для неоднозначности (на всякий случай):

using System;
using System.Collections.Generic;
using System.Reflection;

Мой полный код:

using System;
using System.Collections.Generic;
using System.Reflection;

namespace cant_dynamically_invoke_a_method_in_c_sharp
{
    class Program
    {
        static void Main(string[] args)
        {
            Test.InvokeStuff();
        }
    }

    public class P_WATER
    {
        private int[] jDS = new int[20];
        private int n;

        public int[] JDS { get => jDS; set => jDS = value; }
        public int N { get => n; set => n = value; }

        public void P_WATER1()
        {
            //something...
            Console.WriteLine("Success!");
        }
    }

    public class Test
    {
        public static void InvokeStuff()
        {
            // Needed to mock this up
            List<P_WATER> PLibStateList = new List<P_WATER>();

            P_WATER P_WATERState1 = new P_WATER();
            PLibStateList.Add(P_WATERState1);

            // Try to invoke methods from each objects.
            foreach (object item in PLibStateList)
            {
                Type objType = item.GetType();
                objType.InvokeMember(objType.Name + "1", BindingFlags.InvokeMethod, null, item, null);
            }
        }
    }
}

Введен в метод успешно:

enter image description here

С уважением!

...