反射调用方法 返回自定义List列表,如何进行

反射调用方法 返回自定义List列表,如何进行,第1张

using System;

using SystemCollectionsGeneric;

using SystemLinq;

using SystemText;

using SystemThreadingTasks;

using SystemDynamic;

namespace ConsoleApplication2

{

    class Program

    {

        static void Main(string[] args)

        {

            var list = EnumerableRange(0, 5)Select(x => new { ID = x, Name = "Name" + xToString() })ToList();

            object obj = list;

            var itor = objGetType()GetMethods()Where(x => xName == "GetEnumerator")First()Invoke(obj, new object[] { }) as SystemCollectionsIEnumerator;

            while (itorMoveNext())

            { 

                object current = itorCurrent;

                string Name = currentGetType()GetProperties()Where(x => xName == "Name")First()GetValue(current, new object[] { })ToString();

                ConsoleWriteLine(Name);

            }

        }

    }

}

你好,第二个参数可以传null

public string getValue(string key)

{

PropertyInfo pros = thisGetType()GetProperty("Sl");

//这一步该怎么写,利用参数key,利用反射取得pros 的值。

object obj = prosGetValue(this, null);

SortedList<string, string> temp = obj as SortedList<string, string>;

if (temp != null)

{

return temp[key];

}

return null;

}

补充:为什么不能转化??

你为什么要这样做呢?感觉没有意义啊。你的问题类似于这样。Persona=clazznewInstance();你要把person这个声明方法用反射得到是不可能的。一般反射是用来写框架用的,平常的代码很少用到。创建对象可以用工厂模式

泛型可以用"<T>"代表,任意类型的。

解释: “<T>”是泛型的默认值,可以被任意类型所代替,如:

List<String> list = new ArayList<String>();这个就定义了一个String类型的”泛型“集合,那么T的类型就是字符串。

List<T> list = new ArayList<T>();

可以赋值给list:listadd("StringBatch");

可以获取到list的值:listget(0),结果就是”StringBatch“;

这个时候T的类型也是String。也就是说T是动态的,可以被任意指定类型。

你的当然是1111

你在反射获取对象的时候 循环 *** 作的时候 *** 作的是同一个对象

你必须在循环中 对对应的类型创建新的对象

然后加入List中的 才并非都引用同一个对象

public static List<object> GetRefection(object obj)

{

List<object> objs = new List<object>();

Type t = objGetType();

PropertyInfo[] pros = tGetProperties();

for (int i = 0; i < prosLength; i++)

{

obj=tInvokeMember("Refection", BindingFlagsCreateInstance, null, null, null); //加上这一句

foreach (PropertyInfo pro in pros)

{

proSetValue(obj, iToString(), null);

}

objsAdd(obj);

}

return objs;

}

其他代码不变 0011

先通过IO,定位到这个包

通过Filelist得到一个包含这个包下所有class的文件的数组。

循环这个数组,用包名拼接每一个遍历出来的文件的名字,得到每一个完整的类名(即,包名加类名)

通过classforname反射得到每一个类实例

        Rtu obj=new Rtu();

        List<Cargo> cargos = objgetCargos();

        cargosadd(new Cargo());

        cargosadd(new Cargo());

        cargosadd(new Cargo());

        objsetCargos(cargos);

        Field[] fields = objgetClass()getDeclaredFields();//Object是已经被赋值的对象实例

        for (Field field : fields) {

            if (!fieldisAccessible()) {

                fieldsetAccessible(true);

            }

            if (ListclassisAssignableFrom(fieldgetType())) {

                Method m = ListclassgetDeclaredMethod("size");

                int size = (Integer) minvoke(fieldget(obj));//调用list的size方法,得到list的长度

                Systemoutprintln(size);

                }

            }

        }

以上就是关于反射调用方法 返回自定义List列表,如何进行全部的内容,包括:反射调用方法 返回自定义List列表,如何进行、C# 中如果使用反射取SortedList中的值、java 这样结构 List<List<实体>> ,我怎么通过反射获得内层List的类型,又怎么得到实体的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9325028.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-27
下一篇2023-04-27

发表评论

登录后才能评论

评论列表(0条)

    保存