2016-05-04 12 views
0

私はクラスのプロパティと値のリストを取得するために次のものを使用しています。これらのプロパティのうちの1つがジェネリックリストになるまでうまく動作します。ラムダ式の項目のリストを取得

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)を得ることができますか?

+0

それがリストされている場合は、[string.Join(..)]をチェックアウトする必要があります(https://msdn.microsoft.com/en-us/library/system.string.join( v = 1.10).aspx) –

答えて

4

あなたの問題はIEnumerable<object>に何デリゲートリターンをキャストしようとするas演算子を使用して限り簡単に解決し、それがすでにIEnumerable<object>だ場合、string.Joinを使用することができます。

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); 
+0

パーフェクト!ありがとう、 – Tsukasa

+0

@つかさいいですが、どうぞよろしくお願いします! –

関連する問題