Как установить значение с помощью system.refelection - PullRequest
1 голос
/ 09 марта 2020

Я хотел бы знать, для следующего примера кода, как я могу назначить значения для myClass Obj, используя Type.InvokeMember или с field.SetValue. Имя и значение поля представляются в виде строк.

    class myClass
    {
        public string obj1;
        public string obj2;
    }

    class myClass2
    {
       public myClass obj = new myClass();
    }

    class Program
    {
        static void Main(string[] args)
        {
            Type type = Type.GetType("ConsoleApp2.myClass2");

            object classObj = Activator.CreateInstance(type);
            FieldInfo fi = type.GetField("obj");
            fi.SetValue(??????);
            type.InvokeMember("obj", BindingFlags.SetField, null, classObj , ?????);
        }
    }

Ответы [ 2 ]

2 голосов
/ 09 марта 2020

Это очень просто в вашем примере, вы должны быть в состоянии сделать что-то вроде:

fi.SetValue(classObj, new myClass());

так в вашем случае:

class myClass
{
    public string obj1;
    public string obj2;

}
class myClass2
{
    public myClass obj = new myClass();
}
class Program
{

    static void Main(string[] args)
    {
        Type type2 = Type.GetType("ConsoleApp1.myClass");
        object classObj2 = Activator.CreateInstance(type2);
        FieldInfo fi2 = type2.GetField("obj1");
        fi2.SetValue(classObj2 ,"some str1");
        FieldInfo fi3 = type2.GetField("obj2");
        fi3.SetValue(classObj2 ,"some str2");

        Type type = Type.GetType("ConsoleApp1.myClass2");
        object classObj = Activator.CreateInstance(type);
        FieldInfo fi = type.GetField("obj");
        fi.SetValue(classObj,classObj2);

    }
}
2 голосов
/ 09 марта 2020

Это кажется простым

fi.SetValue(classObj, "new value");

, как указано в документации. Вам это не помогло?

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