获取lambda表达式中的项列表

时间:2016-05-04 19:28:38

标签: c# lambda

我正在使用以下内容来获取类属性和值的列表。只有其中一个属性是通用列表才能正常工作。

string table = HelperMethods.Class2Table(model, "Details", x => x.Facility, x => x.ServiceType, x => x.PatientName);

public static string Class2Table<T>(T obj, string title, params Expression<Func<T, object>>[] props)
{
    StringBuilder sb = new StringBuilder();  
    sb.Append("<table>");
    foreach (var prop in props)
    {
        sb.Append(GetNameAttribute(prop));
        sb.Append("</td>");
        sb.Append("<td>");
        sb.Append(prop.Compile()(obj));
        sb.Append("</td>");
        sb.Append("</tr>\n");
        sb.Append("<br />");
    }
    sb.Append("</table>");
    return sb.ToString();
}

如果列表中有prop.Compile()(obj)返回逗号分隔的字符串,该怎么办?

1 个答案:

答案 0 :(得分:4)

您的问题可以像使用as运算符一样轻松地解决委托返回IEnumerable<object>的内容,如果它已经是IEnumerable<object>,请使用{{ 3}}:

  

Join<T>(String, IEnumerable<T>)是一种方便的方法   不首先连接IEnumerable<T>集合的每个成员   将它们转换为字符串。每个对象的字符串表示形式   在IEnumerable<T>集合中,通过调用该对象来派生   ToString方法。

object propertyValue = prop.Compile()(obj);
IEnumerable<object> enumerableValue = propertyValue as IEnumerable<object>;

if(enumerableValue != null) 
{
     propertyValue = string.Join(",", enumerableValue);
}

sb.Append(propertyValue);