在if-else语句范围之外定义var以供以后使用

时间:2015-07-01 13:21:50

标签: c# linq

我有一个if-else语句,它使用Linq从数据库中获取搜索结果,每个都与另一个不同,但返回的类型是相同的。

我的问题是我无法在if-else语句之外初始化python manage.py migrate 变量。我需要它,因为在声明后我继续查询结果。

结果类型为var;

如何使函数范围中的var能够接受结果?

我尝试使用iQueryable<mission>初始化它并且它没有用,尝试使用Enumerable.Empty<mission>().AsQueryable()变量并设置dynamic,它也没有工作

2 个答案:

答案 0 :(得分:5)

所以......不要使用var

IQueryable<Mission> variable;

if (...)
{
  ...

此外,作为var variable = null(无法编译)的替代方法,您可以使用default

var variable = default(IQueryable<Mission>);

与上面的代码不同,这将隐藏源自&#34;遗忘&#34;要分配给变量 - 您要分配&#34;键入&#34; null,因此变量具有指定的值。在第一个示例中,variable并未分配,因此,如果您的代码的任何分支尝试读取variable 首先不用写入,编译器将报告错误。另请注意,default仅返回null作为参考类型。值类型基本上会返回该特定类型的零均值 - 例如,default(int)只是零,default(DateTime)01/01/0001 00:00:00DateTime.MinValue)。

答案 1 :(得分:4)

编译器必须能够在编译时确定var变量实际类型。如果你这样做:

var foo = null;

或者这个:

var foo;

foo的类型是什么?你无法分辨,编译器也无法分辨。

因此,如果您需要将变量设置为null,则必须告诉编译器它是什么类型

IQueryable<Mission> foo = null;

或者,如果您还不想初始化它:

IQueryable<Mission> foo;

查看隐式类型局部变量的MSDN参考。特别是:

  

var关键字指示编译器从初始化语句右侧的表达式推断变量的类型。

您无法从null推断出类型,如果右侧没有表达式,您肯定无法做到。

此外:

  

var只能在同一语句中声明和初始化局部变量时使用;该变量不能初始化为null,也不能初始化为方法组或匿名函数。