Инициализировать неявно типизированную локальную переменную в IList - PullRequest
1 голос
/ 20 апреля 2011

Я понимаю, что implicitly-typed local variables must be initialized.

Я знаю, что result будет IList, поэтому могу ли я как-то сказать, что var result будет IList?

var result; //initialize to something 

if( x < 0)  
{  
    result = (from s in context.someEntity  
              where s.somecolumn = x  
              select new { c1 = s.c1,c2=s.c2}).ToList();  
}

if(x >= 0)  
{  
    result = (from s in context.someEntity  
              where s.someOtherColumn = x  
              select new { c1 = s.c1,c2=s.c2}).ToList();  
}

foreach(var y in result)  
{  
    //do something . UPDATE 1: Retrieve y.c1, y.c2

}  

Ответы [ 5 ]

3 голосов
/ 20 апреля 2011

Нет, они не могут быть «var можно использовать только тогда, когда локальная переменная объявлена ​​и инициализирована в одном и том же операторе; переменная не может быть инициализирована как null, или как группа методов или анонимная функция.»

Поскольку вы не инициализируете интерфейс, он не будет работать.

http://msdn.microsoft.com/en-us/library/bb384061.aspx

1 голос
/ 20 апреля 2011

Сделайте это:

var result = default(IList);
1 голос
/ 20 апреля 2011

Если вы знаете, что хотите, чтобы он был IList, почему бы просто не объявить его как IList?

Использование var для неинициализированных переменных (IMO) довольно нечитаемо.

0 голосов
/ 14 ноября 2013

Если вы используете System.Collections.Generic в своем коде, тогда единственная доступная опция -

var list = (x <0)?...: ... </p>

Если вы попытаетесь использовать IList в описанном выше сценарии, вы получите ошибку. Неявно не удалось преобразовать тип 'System.Collections.Generic.IEnumerable' в 'System.Collections.IList'.Существует явное преобразование (вам не хватает приведения?)

Но если вы используете System.Collections, вы можете использовать

IList result;

0 голосов
/ 20 апреля 2011

Возможно, вы сможете что-то сделать с помощью троичной операции:

var list = (x < 0) ? ... : ...

но на самом деле это было бы довольно больно читать. С вашим кодом, как опубликовано, я думаю, что я просто придерживаюсь

IList result;

для удобства чтения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...