2011-10-18 20 views
0

XMLファイルから配列のリストを取得したい。私はクエリのための統合ツールを使用します。しかし、foreachループのない配列のリストを作成したい場合はどうすればよいですか? (理由は、この場合のforeachを適用することができないASP.NET MVC-3でforeachループなしで配列リストを表示

XMLファイル形式:。Index.cshtmlで

<arr name="ArrayinXML"><str>dsfadasfsdasda</str><str>gdhsdhshhfb</str> 

:上記の場合

@p.ArrayinXML.FirstOrDefault()

、最初の文字列値のみを返し、2番目の文字列値は返しません。

+0

なぜ適用できないのですか?あなたができないなら、あなたはかなり限られています。 'while'や' for''を使えますか? – Buildstarted

答えて

0

foreachを拡張する拡張メソッドを作成できますか?

このような何か:

public static class IEnumerableExtensions 
{ 
    public static string ToString<T>(this IEnumerable<T> collection, string separater) 
    { 
     if (collection == null) 
      return String.Empty; 

     return String.Join(separater, collection); 
    } 
} 

あなたは、もちろん、ちょうどあなたのコード内で@String.Join(p.ArrayinXML, ", ")を呼び出すことができますが、私は、拡張メソッドは、それが少しよりエレガントになりだと思います。

次に、あなたのweb.configファイルに拡張子の名前空間を追加し、あなたがビューでこれを行うことができます。

@p.ArrayinXML.ToString(", ") 

は編集:

あなたはさらにカスタマイズすることができますので、ここで変換パラメータを持つ拡張です。

public static string ToString<T>(this IEnumerable<T> collection, string separater, Func<T, object> transform) where T : class 
{ 
    if (collection == null) 
     return String.Empty; 

    return String.Join(separater, collection.Select(s => transform(s).ToString())); 
} 
+0

どこにIEnumerableExtensionsを追加する必要がありますか? * Global.asax *または* Web.Config *? '@ String.Join(p.ArrayinXML、"、 ")'が機能しないためです。 –

+0

トランスフォームで追加の拡張メソッドを追加しました。 @ String.Join(p.ArrayinXML、 "、")は、ArrayinXMLの正確さに応じて動作しない可能性があります。文字列のコレクションですか?オブジェクトのコレクション?どのようにフォーマットするかは、要素が.ToString()をどのように実行するかによって異なります。 拡張機能を追加する場所は、拡張機能クラスだけです。どこにでも追加できます。次に、ベースweb.configとViews/web.configファイルの名前空間を参照します。こちらをご覧ください:http://stackoverflow.com/questions/3239006/how-to-import-a-namespace-in-razor-view-page/6723046#6723046 – Leniency

関連する問題