2017-02-03 2 views
2

Я не могу узнать, возможно ли это, и если я хочу слишком сильно нажать лямбда. Мне не нравится двойное регулярное выражение (Class.Column не мое). У меня есть этот простой выбор функции:linq lambda multiple steps array

(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() 
     } 
    ); 

Есть ли способ, чтобы установить выход регулярных выражений в качестве г, то param1 = z1.Groups[1].ToString()?

+0

почему не просто 'x.Split (':')' – Slai

ответ

2

Вы можете использовать несколько строк для выполнения нескольких преобразований. Вы также должны заменить отбрасываемой функции 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(), а не то, что было бы предпочтительнее. –