
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的类型,又怎么得到实体的类型等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)