как исправить, что VAR не существует в предложении if-else и foreach

#asp.net #entity-framework #linq #linq-to-sql

#asp.net #entity-framework #linq #linq-to-sql

Вопрос:

 private void ChartConfig()
{    
    var qnb;                

    for (int o = 1601; o < 1612   1; o  )
    {
        if (o == 1601)
        {
            qnb = (from gog in db.SPerf_Notes
                   where gog.Module == ASPxComboBox1.Text.Trim()
                   select new { gog.Module, gog.KPI_Name, gog._1 }).ToList();
        }
        else
        {
            qnb = (from gog in db.SPerf_Notes
                   where gog.Module == ASPxComboBox1.Text.Trim()
                   select new { gog.Module, gog.KPI_Name, gog._11 }).ToList();
        }                

        foreach (var a in qnb)
        {
            list3.Add(a.Module.Trim());
            list3.Add(a.KPI_Name.Trim());
            list3.Add(a._1.ToString());
        }
 }
  

В верхней части страницы я инициализировал var qnb; , но я думаю, что это не работает.
Ошибка :

Ошибка 123 Неявно типизированные локальные переменные должны быть инициализированы

Как я могу решить эту проблему?

Ответ №1:

вы можете создать свой qnb следующим образом

 IEnumerable<object> qnb= Enumerable.Empty<object>();
  

Ответ №2:

Из документации: «var можно использовать только тогда, когда локальная переменная объявлена и инициализирована в том же операторе»

Когда вы используете var ключевое слово для объявления переменной, эта переменная называется «неявно типизированной». Это означает, что компилятор определяет тип переменной на основе значения, которое вы ей присвоили.

Лучший способ справиться с этим в вашем коде был бы таким:

 private void ChartConfig()
{    
    for (int o = 1601; o < 1612   1; o  )
    {            
        var qnb = (from gog in db.SPerf_Notes
                   where gog.Module == ASPxComboBox1.Text.Trim()
                   select new { 
                        gog.Module, 
                        gog.KPI_Name, 
                        (o == 1601 ? gog._1 : gog._11) //You should give this field a name
                    }).ToList();

        foreach (var a in qnb)
        {
            list3.Add(a.Module.Trim());
            list3.Add(a.KPI_Name.Trim());
            list3.Add(a._1.ToString());
        }
 }