C# 当前上下文中不存在if/else变量声明和对象错误
下面的代码声明了两个变量,然后执行一个查询。不管发生什么,变量都会被创建,所以当查询即将执行时,我很惊讶得到一个对象在当前上下文错误中不存在。我怎么能做这样的事?这已经发生过好几次了。我还尝试在变量声明中使用if/else语句,但没有成功。然后我得到了错误的无效表达式,如果我需要说什么才能使它工作呢C# 当前上下文中不存在if/else变量声明和对象错误,c#,.net,conditional,C#,.net,Conditional,下面的代码声明了两个变量,然后执行一个查询。不管发生什么,变量都会被创建,所以当查询即将执行时,我很惊讶得到一个对象在当前上下文错误中不存在。我怎么能做这样的事?这已经发生过好几次了。我还尝试在变量声明中使用if/else语句,但没有成功。然后我得到了错误的无效表达式,如果我需要说什么才能使它工作呢 if (from_date == null) { var from_date_choose = DateTime.Today.AddDays(-30);
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_choose和to_date_choose。你不能在你宣布航行的地方访问它们
您需要在与航行相同的范围内声明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和to_date_choose。你不能在你宣布航行的地方访问它们
您需要在与航行相同的范围内声明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.Value和to_date.Value,我假设它们的类型为Nullable: 或者如Jeppe Stig Nielsen所建议的,使用聚结算子,例如:
DateTime from_date_choose = from_date ?? DateTime.Today.AddDays(-30);
这样修改代码,否则变量只存在于局部范围内。您还需要使用from_date.Value和to_date.Value,我假设它们的类型为Nullable: 或者如Jeppe Stig Nielsen所建议的,使用聚结算子,例如:
DateTime from_date_choose = from_date ?? DateTime.Today.AddDays(-30);
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);
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);
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);
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);
在if语句中声明的内容只能在该if语句范围内访问。这就是所谓的变量。像这样改变你的方法
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);
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);
在if语句中声明的内容只能在该if语句范围内访问。这就是所谓的变量。像这样改变你的方法
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);
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);
甚至比?:运算符更好,这是空合并运算符的典型用法,因此DateTime from_date_choose=from_date??DateTime.Today.AddDays-30;。甚至比?:运算符更好,这是空合并运算符的典型用法,因此DateTime from_date_choose=from_date??DateTime.Today.AddDays-30;。