LINQ列表属性到数组?

时间:2011-08-31 17:39:20

标签: c# arrays linq

PROPNAME可以是T类型的任何属性的情况下,最好的方法是什么?用反射构建它,还是有一个很好的LINQ方法呢?

T[] vals = people.Select(x => x.PROPNAME).ToArray<T>();

这是我到目前为止所做的最好的事情:

    public T[] ConvertListCol<TFrom,T>(IEnumerable<TFrom> list, string col)
    {
        var typ = typeof (TFrom);
        var props = typ.GetProperties();
        var prop = (from p in props where p.Name == col select p).FirstOrDefault();
        var ret = from o in list select prop.GetValue(o, null);
        return ret.ToArray<T>();
    }

在回报中遇到错误......但越来越近了。没关系,但比我希望的更麻烦。

2 个答案:

答案 0 :(得分:24)

使用非显式var类型,它会自动为您生成类型

var names = people.Select(x => x.PROPNAME).ToArray();

答案 1 :(得分:7)

如果使用var关键字,将推断出类型:

var names = people.Select(x => x.PROPNAME).ToArray();