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);

if/else变量声明和对象在当前上下文中不存在错误

这样修改代码,否则您的变量只存在于本地范围中。您还需要使用from_date.Valueto_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_chooseto_date_choose。您无法在声明voyages的位置访问它们。

您需要在与voyages相同的范围内声明from_date_chooseto_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);