用Type Var变量修复范围问题

时间:2010-07-09 16:02:24

标签: c# scope

在下面的代码中,我需要将“Variable1”设置为任意值,因此我不会在下面进一步讨论范围问题。对于var类型的变量,最好的任意值是什么,或者是否有更好的方法来避免我遇到的范围问题?

var Variable1;
if(Something == 0)
{
    //DB = DatabaseObject
    Variable1 = 
        from a in DB.Table
        select new {Data = a};
}
int RowTotal = Variable1.Count();

3 个答案:

答案 0 :(得分:3)

嗯,你可以这样做:

// It's not clear from your example what the type of Data should
// be; adjust accordingly.
var variable1 = Enumerable.Repeat(new { Data = 0 }, 0).AsQueryable();
if (something == 0)
{
    //DB = DatabaseObject
    variable1 = from a in DB.Table
                select new {Data = a};
}
int rowTotal = variable1.Count();

这实际上是“通过示例打字”。说实话,我会尽量避免它 - 但是如果没有看到剩下的方法,很难确切地知道我是怎么做的。如果可能的话,我会尽量保持匿名类型范围尽可能紧。

注意:在这种情况下,您只需选择a而不是匿名类型。我假设你的真实用例更复杂。同样,如果真正只需要行总数,那么在大括号内设置 。上述解决方案仅适用于您以后真正需要变量值的情况。

答案 1 :(得分:1)

您是稍后在代码中使用Variable1,还是仅查找行数。

如果是后者,那就是:

int RowTotal = DB.Table.Count();

如果是整个区块:

int RowTotal = (Something == 0) ? DB.Table.Count() : 0;

答案 2 :(得分:0)

看起来您可以将其定义为IEnumerable。然后你可以像你想要的那样使用计数功能。