LINQ列表属性到数组?

sgt*_*gtz 13 c# linq arrays

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

T[] vals = people.Select(x => x.PROPNAME).ToArray<T>();
Run Code Online (Sandbox Code Playgroud)

这是我迄今为止最好的:

    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>();
    }
Run Code Online (Sandbox Code Playgroud)

返回时出错......但越来越近了.没关系,但比我希望的要小一些.

JCo*_*ine 24

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

var names = people.Select(x => x.PROPNAME).ToArray();
Run Code Online (Sandbox Code Playgroud)


小智 7

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

var names = people.Select(x => x.PROPNAME).ToArray();
Run Code Online (Sandbox Code Playgroud)