if/else变量声明和对象在当前上下文中不存在错误
本文关键字:上下文 错误 不存在 对象 else 变量 声明 if | 更新日期: 2023-09-27 18:25:08
我有下面的代码,它声明了两个变量,然后执行一个查询。不管怎样,变量都会被创建,所以当查询即将执行时,我很惊讶地得到了一个object does not exist in current context error
。我怎么能做这样的事?这种情况已经发生过好几次了。我还尝试在变量的声明中使用if/else语句,但这并没有奏效。(然后我得到错误invalid expression if
)我需要说些什么才能工作?
if (from_date == null) {
var from_date_choose = DateTime.Today.AddDays(-30);
} else {
var from_date_choose = from_date;
}
if (to_date == null) {
var to_date_choose = DateTime.Today;
} else {
var to_date_choose = to_date;
}
var voyages = db.Voyages
.Where(v => v.ArrivalDatetime >= from_date_choose)
.Where(v => v.ArrivalDatetime <= to_date_choose);
这样修改代码,否则您的变量只存在于本地范围中。您还需要使用from_date.Value
和to_date.Value
(我假设它们属于Nullable<DateTime>
类型):
DateTime from_date_choose;
if (from_date == null) {
from_date_choose = DateTime.Today.AddDays(-30);
} else {
from_date_choose = from_date.Value;
}
DateTime to_date_choose;
if (to_date == null) {
to_date_choose = DateTime.Today;
} else {
to_date_choose = to_date.Value;
}
var voyages = db.Voyages
.Where(v => v.ArrivalDatetime >= from_date_choose)
.Where(v => v.ArrivalDatetime <= to_date_choose);
您也可以使用三元运算符,例如:
DateTime from_date_choose = from_date == null ? DateTime.Today.AddDays(-30) : from_date.Value;
或者正如杰普·斯蒂格·尼尔森所建议的那样,使用合并运算符,例如:
DateTime from_date_choose = from_date ?? DateTime.Today.AddDays(-30);
您已经在局部变量作用域中声明了from_date_choose
和to_date_choose
。您无法在声明voyages
的位置访问它们。
您需要在与voyages
相同的范围内声明from_date_choose
和to_date_choose
,例如:
DateTime from_date_choose;
if (from_date == null) {
from_date_choose = DateTime.Today.AddDays(-30);
} else {
from_date_choose = from_date;
}
from_date_choose和from_date_choose在if语句的范围内声明。where子句的作用域中没有它们。最好的方法是在顶部声明它们,然后稍后分配给它们
DateTime from_date_choose = DateTime.Today.AddDays(-30);
DateTime to_date_choose = DateTime.Today;
if (from_date != null) {
var from_date_choose = from_date;
}
if (to_date != null) {
var to_date_choose = to_date;
}
var voyages = db.Voyages
.Where(v => v.ArrivalDatetime >= from_date_choose)
.Where(v => v.ArrivalDatetime <= to_date_choose);
您在if语句中声明的内容只能在if语句范围内访问这称为变量的作用域。像这个一样改变你的方法
DateTime from_date_choose;
DateTime to_date_choose;
if (from_date == null) {
from_date_choose = DateTime.Today.AddDays(-30);
} else {
from_date_choose = from_date;
}
if (to_date == null) {
to_date_choose = DateTime.Today;
} else {
to_date_choose = to_date;
}
var voyages = db.Voyages
.Where(v => v.ArrivalDatetime >= from_date_choose)
.Where(v => v.ArrivalDatetime <= to_date_choose);