2013-07-26 4 views
-3
if(some condition) 
{ 

     var columnSeries = (from l in logs 
     group l by l.MonitoringPorfileName into grp 
     select new 
     { 
       type = "column", 
       name = grp.Key, 
       data = (from h in Hours 
          let gd = grp.Where(x => x.Hours == h) 
          select gd.Sum(x => x.Count)).ToArray() 
         }).ToList(); 



      } 
} 

Как я могу сделать эту переменную columnSeries глобальной переменной? Я много искал в этом, нашел список dynamic> new {}; но ни один из них не работает, поэтому помощь будет действительно оцененадинамический список в C#

+2

Всякий раз, когда вы используете identation так, Бог убивает маленький котенок. – Renan

+0

Каково условие с 'if'? –

+0

Имеет ли значение состояние? я просто хочу знать, как мы можем сделать его глобальным, чтобы его можно было использовать после объема этого IF – user2137186

ответ

3

Сделайте анонимным тип, в котором вы хотите заняться классом.

public class ColumnSeries 
{ 
    public string type {get; set;} 
    //... 
} 

//class level variable 
IEnumerable<ColumnSeries> columnSeries = null; 

//then create the ColumnSeries list 
columnSeries = (from l in logs 
       group l by l.MonitoringPorfileName into grp 
       select new ColumnSeries 
       { 
        type = "column", 
        name = grp.Key, 
        data = (from h in Hours 
          let gd = grp.Where(x => x.Hours == h) 
          select gd.Sum(x => x.Count)).ToArray() 
       }); 
+1

Даже лучше, если вы просто используете IEnumerable вместо списка –

+0

+1 - Отличное место. – keyboardP

1

Вы создаете анонимный тип внутри своего if-объекта, но хотите использовать результат в пределах объема инструкции if. Обычно вы просто определяете «columnSeries» до того, если B, но это анонимный тип, поэтому он не является очевидным.

Итак, перед тем, если заявление сделайте следующее (непроверенное, но должно быть близко):

var columnSeries = Enumerable.Repeat(new {type="", name="", data=new int[]{0}}, 0); 

Check out this question for more info