【发布时间】:2011-11-07 19:55:37
【问题描述】:
如果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>();
}
返回时出错...但越来越近了。没关系,但比我希望的要混乱一些。
【问题讨论】:
-
你是在寻找
people的属性名数组吗? -
您是否正在尝试制作一段可重用的代码,您可以在其中指定任何属性并取回字符串表示形式?
-
情况是有一个包含许多属性的大型 poco 对象,API 希望一次看到一列而不是一次看到一行。
-
何时知道 Propname:设计时间、编译时间、运行时间?
-
propname 在编译时是已知的,但是,我面临着 n 个 LINQ 语句的 switch 语句,或者基于反射的东西。希望有一些更聪明的效率和优雅的东西。