我有以下代码:
if (intval == 0)
{
var result = (from dm in datacontext.Trk
where dm.ID == 0
select dm);
}
else
{
var result = (from dm in datacontext.Trk
where dm.ID != 0
select dm);
}
if (result != null)
{
// do something
}
if (result!= null)
中的结果下有一条闪烁的行,说当前上下文中不存在名称结果。
不确定如何解决这个问题。我最初尝试var result = null
,但C#不喜欢这样。
答案 0 :(得分:10)
变量仅限于声明的块。因此,您有两个result
个,if
块中的一个和else
块中的一个不同且不可见在他们的街区之外。
您需要从块中定义变量,但是您需要具体了解类型,因为C#编译器需要直接赋值表达式来推断var
关键字的类型。
但是,我建议您重新考虑您的代码并执行以下操作:
var result = from dm in datacontext.Trk
where ((intval == 0) ? dm.ID == 0 : dm.ID != 0)
select dm;
if (result.Any())
{
// do something
}
另请注意,result
永远不会是null
,因此,我已将其替换为Any
,但我认为这不是问题的要点。
答案 1 :(得分:3)
您需要在if语句之前声明result
:
object result = null;
if (intval = 0)
{
result = (from dm in datacontext.Trk
where dm.ID = 0
select dm);
}
else
{
result = (from dm in datacontext.Trk
where dm.ID != 0
select dm);
}
if (result != null)
{
// do something
}
或者您可以将var声明保留在另一个变体中:
var result = (from dm in datacontext.Trk
where dm.ID != 0
select dm);
if (intval = 0)
{
result = (from dm in datacontext.Trk
where dm.ID = 0
select dm);
}
if (result != null)
{
// do something
}
现在您应该找到一种方法来更改if
或完全删除它,因为此时result
不能是null
。
答案 2 :(得分:3)
这样的事情怎么样:
var result =
intval == 0
?(from dm in datacontext.Trk where dm.ID = 0 select dm)
:(from dm in datacontext.Trk where dm.ID != 0 select dm);
if(results.Any())
{
...
}
答案 3 :(得分:1)
您可以执行与主查询分开的位置:
var result = from dm in datacontext.Trk select dm;
if (intval == 0)
{
result = result.Where(dm => dm.ID == 0);
}
else
{
result = result.Where(dm => dm.ID != 0);
}
if (result.Any())
{
// do something
}
答案 4 :(得分:0)
您需要在第一个if-else之前声明结果变量。
您还需要在第二个if语句中围绕条件进行禁用。
答案 5 :(得分:0)
此代码也会导致问题:
if (value == 0)
{
int result = 1;
}
else
{
string result = "testing";
}
if (result != 1)
{
// do something
}
第一次结果为int
,第二次声明string
,第三次result
未声明。它们可以具有不同类型的原因是因为前两个声明属于不同的范围。每个{ ... }
都有自己的范围。
如果要在范围之间共享一个变量,则需要在外部声明它。但是现在,由于在所有三个地方都使用了相同的变量,因此存在类型不匹配的编译器错误:
int result;
if (value == 0)
{
result = 1;
}
else
{
result = "testing"; // type error here
}
if (result != 1)
{
// do something
}
答案 6 :(得分:0)
List<TypeOfDm> dmList; // <=== Declare dmList outside of block statements.
if (intval == 0) { // <=== Use "==" for comparision, "=" is assignement.
dmList = datacontext.Trk
.Where(dm => dm.ID == 0)
.ToList();
} else {
dmList = datacontext.Trk
.Where(dm => dm.ID != 0)
.ToList();
}
if (dmList.Count != 0) {
// do something
}
注意,使用您的代码,您的结果将始终为非null。