使用反射和List<>,可以通过扩展方法返回特定属性的数组

本文关键字:返回 方法 属性 数组 扩展 可以通过 反射 List | 更新日期: 2023-09-27 18:12:34

我不太清楚术语,所以请原谅我不够清楚:集合,是否可以利用反射创建一个扩展方法,允许使用属性名称返回列表集合中特定类成员/属性的数组?我意识到内部类型可能不同,但扩展方法将返回正确的类型。

public class someClass
{
    public someClass(UInt32 _someInt, Double _someDouble, String _someString)
    {
        someInt = _someInt;
        someDouble = _someDouble;
        someString = _someString;
    }
    public UInt32 someInt { get; set; }
    public Double someDouble { get; set; }
    public String someString { get; set; }
  }
...
List<someClass> listOfClasses = new List<someClass>();
listOfClasses.Add(new someClass(...));
listOfClasses.Add(new someClass(...));
listOfClasses.Add(new someClass(...));
//an extension function that does something like this
object[] propDouble = listOfClasses.ToArray("someDouble");

使用反射和List<>,可以通过扩展方法返回特定属性的数组

var propDouble = listOfClasses.Select(x => typeof(someClass)
                                           .GetProperty("someDouble")
                                           .GetValue(x)).ToArray();

这不是你想要的吗??

List<someclass> L;
IEnumerable<DesiredPropertyType> Properties = 
     L.Select(Item => Item.DesiredProperty).ToArray();

简短回答:是

如何:

object[] propDouble = listOfClasses.Select(o => o.GetType()
                                                 .GetField("someDouble")
                                                 .GetValue(o)).ToArray();

您可以轻松地将其转换为扩展方法