通过反射得到实体类,然后通过反射得到成员List类实体属性的值

超级小小 2016-08-09 09:44:30
public class TestData1
{
private static List<TestDataModel> listData = new List<TestDataModel>();

static TestData1()
{
listData.Add(new TestDataModel() { Id = 1, Name = "test1", Value = 1.1m, UpdateTime = DateTime.Now });
listData.Add(new TestDataModel() { Id = 2, Name = "test2", Value = 1.2m, UpdateTime = DateTime.Now.AddSeconds(2) });
listData.Add(new TestDataModel() { Id = 3, Name = "test3", Value = 1.3m, UpdateTime = DateTime.Now.AddSeconds(3) });
listData.Add(new TestDataModel() { Id = 4, Name = "test4", Value = 1.4m, UpdateTime = DateTime.Now.AddSeconds(4) });
}

public static List<TestDataModel> GetAll()
{
return listData;
}
}
public class TestDataModel
{
public int Id { get; set; }

public string Name { get; set; }

public decimal Value { get; set; }

public DateTime UpdateTime { get; set; }
}


// 代码如上,
只知道,TestDataModel,TestData1这两个类型,但是并不知道,类中哪个类是什么,因为这里举例,只写了两个类,可能有很多类。


public class MonitorManager
{
private static List<Type> monitorType = new List<Type>();

public static void AddType(Type type)
{
monitorType.Add(type);
}

public static TreeNode ReadTree(string title)
{
List<string> typeList = new List<string>();
foreach (var type in monitorType)
{
typeList.Add(type.FullName);
}

TreeNode root = new TreeNode(title);
foreach (var type in monitorType)
{
FieldInfo[] fields = type.GetFields(BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Public | BindingFlags.GetField);
foreach (FieldInfo f in fields)
{
var data = f.GetValue(null);
string typeName = data.GetType().FullName;
TreeNode node = new TreeNode(f.Name);
// ...省略部分判断逻辑 ..
else if (typeName.StartsWith("System.Collections.Generic.List`1[["))
{
foreach (var item in typeList)
{
if (typeList.Exists(p => typeName.StartsWith("System.Collections.Generic.List`1[[" + p)))
{
Type t = Type.GetType(item, true, true);
// 这里希望得到集合中所有元素的值。
// 某对象集合
//TreeNode itemNode = new TreeNode(m.ToString());
//node.Nodes.Add(item);
}
}
}

root.Nodes.Add(node);
}
}

return root;
}
...全文
358 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
超级小小 2016-08-09
  • 打赏
  • 举报
回复
好吧。 找到了。 foreach (object o in (list as IEnumerable))
超级小小 2016-08-09
  • 打赏
  • 举报
回复
@以专业开发人员为伍 @中国风 @卖水果的net 求助
超级小小 2016-08-09
  • 打赏
  • 举报
回复
调用方式如下。

            MonitorManager.AddType(typeof(TestData1));
            MonitorManager.AddType(typeof(TestDataModel));

            var tree = MonitorManager.ReadTree("root");

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧