我有一个if-else语句,它使用Linq从数据库中获取搜索结果,每个都与另一个不同,但返回的类型是相同的。
我的问题是我无法在if-else语句之外初始化python manage.py migrate
变量。我需要它,因为在声明后我继续查询结果。
结果类型为var
;
如何使函数范围中的var能够接受结果?
我尝试使用iQueryable<mission>
初始化它并且它没有用,尝试使用Enumerable.Empty<mission>().AsQueryable()
变量并设置dynamic
,它也没有工作
答案 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:00
(DateTime.MinValue
)。
答案 1 :(得分:4)
编译器必须能够在编译时确定var
变量的实际类型。如果你这样做:
var foo = null;
或者这个:
var foo;
foo
的类型是什么?你无法分辨,编译器也无法分辨。
因此,如果您需要将变量设置为null
,则必须告诉编译器它是什么类型:
IQueryable<Mission> foo = null;
或者,如果您还不想初始化它:
IQueryable<Mission> foo;
查看隐式类型局部变量的MSDN参考。特别是:
var关键字指示编译器从初始化语句右侧的表达式推断变量的类型。
您无法从null
推断出类型,如果右侧没有表达式,您肯定无法做到。
此外:
var只能在同一语句中声明和初始化局部变量时使用;该变量不能初始化为null,也不能初始化为方法组或匿名函数。