首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用反射和List<>,可以通过扩展方法返回特定属性的数组吗?

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

Stack Overflow用户
提问于 2013-05-08 00:35:44
回答 3查看 108关注 0票数 1

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

代码语言:javascript
运行
复制
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");
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-08 00:41:19

代码语言:javascript
运行
复制
var propDouble = listOfClasses.Select(x => typeof(someClass)
                                           .GetProperty("someDouble")
                                           .GetValue(x)).ToArray();
票数 1
EN

Stack Overflow用户

发布于 2013-05-08 00:38:55

简短的回答:是的。

方法:

代码语言:javascript
运行
复制
object[] propDouble = listOfClasses.Select(o => o.GetType()
                                                 .GetField("someDouble")
                                                 .GetValue(o)).ToArray();

您可以很容易地将其转换为扩展方法。

票数 0
EN

Stack Overflow用户

发布于 2013-05-08 00:40:54

这不是你想要的吗?

代码语言:javascript
运行
复制
List<someclass> L;
IEnumerable<DesiredPropertyType> Properties = 
     L.Select(Item => Item.DesiredProperty).ToArray();
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16424196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档