gpt4 book ai didi

C# - 使用反射从列表中提取值列表

转载 作者:行者123 更新时间:2023-12-02 00:30:31 26 4
gpt4 key购买 nike

我有一个包含一个类的列表,并且希望能够使用反射来迭代该类中的每个属性并生成一个包含每个属性值的列表。我使用反射来获取所有属性没有问题,但我失败的地方在于迭代提取每个属性值列表的语法。

示例代码:

public class ExampleClass
{
public double Val1 {get; set;}
public double Val2 { get; set; }
public double Val3 { get; set; }

public ExampleClass(double val1, double val2, double val3)
{
this.Val1 = val1;
this.Val2 = val2;
this.Val3 = val3 ;
}
}

public class Main
{
public Main()
{
List<ExampleClass> exampleList = new List<ExampleClass>();

exampleList.Add(new ExampleClass(1.1, 1.2, 1.3));
exampleList.Add(new ExampleClass(2.1, 2.2, 2.3));
exampleList.Add(new ExampleClass(3.1, 3.2, 3.3));


List<PropertyInfo> properties = exampleList[0]
.GetType()
.GetProperties(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly)
.ToList();

foreach (PropertyInfo prop in properties)
{
// Extract each property into a list, e.g.
// 1st pass: list containing 1.1, 2.1, and 3.1
// 2nd pass: list containing 1.2, 2.2 and 3.2
// 3rd pass: list containing 1.3, 2.3 and 3.3
}
}
}

如果我要手动指定我想要的属性,我可以使用如下内容:

var test = exampleList.Select(X => X.Val1).ToList();

不幸的是,我的最佳猜测如下所示,并生成“对象引用未设置到对象的实例”错误

var test1 = collectionCompletionList.GetType().GetProperty(prop.Name).GetValue(collectionCompletionList, null);

我在这里错过了什么(大概)简单的事情?

最佳答案

你快明白了。 PropertyInfo 类的 GetValue 方法采用将返回其属性值的对象作为参数。因此,您需要向其传递列表中的项目,而不是列表本身。

foreach (PropertyInfo prop in properties) {
var propertiesValues = exampleList.Select(o => prop.GetValue(o)).ToList();
}

关于C# - 使用反射从列表<Class>中提取值列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34189703/

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