2017-02-03 11 views
2

私はこれが可能かどうか、ラムダをあまりにも遠くに押したいのかどうかはわかりません。私はダブル正規表現が好きではない(Class.Columnは私のものではない)。私はこの単純な選択機能があります。linqラムダ複数のステップの配列

を(ColumNamesが一覧である)

string reg = "(.*):(.*)"; 
Class.Column[] Columns = (Class.Column[])this.ColumnNames 
    .Select(x => 
     new Class.Column() { 
      Param1 = Regex.Match(x, reg).Groups[1].ToString(), 
      Param2 = Regex.Match(x, reg).Groups[2].ToString() 
     } 
    ); 

はその後、Z、param1 = z1.Groups[1].ToString()として正規表現の出力を設定する方法はありますか?

+0

をキャストを交換する必要が理由だけではなく、 'x.Split( ':')' – Slai

答えて

2

linq multiple複数の変換を実行する場合に選択します。 ます。またてToArray機能によって

 Class.Column[] Columns = this.ColumnNames 
      .Select(x=> Regex.Match(x, reg)) 
      .Select(z => 
      new Class.Column() 
      { 
       Param1 = z.Groups[1].ToString(), 
       Param2 = z.Groups[2].ToString() 
      }).ToArray(); 
+0

私は '.ToArrayは()'必要だと思います。 '.Select(...)'の結果を配列にキャストすることは、配列ではないので失敗します。 – Maarten

+0

あなたは正しいです。私が言いたいのは、これを行う正しい方法は、ToArray()機能を使用することであり、それは望ましいことではないということです。 –