gpt4 book ai didi

C#,获取一个对象的所有集合属性

转载 作者:太空狗 更新时间:2023-10-30 00:09:08 26 4
gpt4 key购买 nike

我有一个包含 3 个列表集合的类,如下所示。

我正在尝试建立一个逻辑来遍历对象的“集合” 属性并使用存储在这些集合中的数据执行一些操作。

我只是想知道是否有使用 foreach 的简单方法。谢谢

public class SampleChartData
{
public List<Point> Series1 { get; set; }
public List<Point> Series2 { get; set; }
public List<Point> Series3 { get; set; }

public SampleChartData()
{
Series1 = new List<Point>();
Series2 = new List<Point>();
Series3 = new List<Point>();
}
}

最佳答案

从对象中获取所有 IEnumerable 的函数:

public static IEnumerable<IEnumerable<T>> GetCollections<T>(object obj)
{
if(obj == null) throw new ArgumentNullException("obj");
var type = obj.GetType();
var res = new List<IEnumerable<T>>();
foreach(var prop in type.GetProperties())
{
// is IEnumerable<T>?
if(typeof(IEnumerable<T>).IsAssignableFrom(prop.PropertyType))
{
var get = prop.GetGetMethod();
if(!get.IsStatic && get.GetParameters().Length == 0) // skip indexed & static
{
var collection = (IEnumerable<T>)get.Invoke(obj, null);
if(collection != null) res.Add(collection);
}
}
}
return res;
}

然后你可以使用类似的东西

var data = new SampleChartData();
foreach(var collection in GetCollections<Point>(data))
{
foreach(var point in collection)
{
// do work
}
}

遍历所有元素。

关于C#,获取一个对象的所有集合属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3024381/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com