c# - 如何在 C# 中重用 "var"声明的变量

标签 c# linq var

我想实现的是这样的:

switch(flag)
{
    case 1:
          var query=from w in db.someTable
                    select w;
          break;
    case 2:
          query=from w in db.someTable
                    where w.id==someID
                    select w;
          break;
    case default:
          break;
}

但它无法正确编译。如果我在第二个query前加上一个var,它会提示query已经声明。 我必须更改变量名称吗?例如:query1 in case1,query2 in case2,等等


已编辑 1 感谢您的帮助。事实上,我的代码比我上面发布的要复杂一点。完整代码如下:

List<object> results=new List<object>();
switch (flag)
{
    case 1:
    var query = from w in db.RADIATION
    where w.DATEDT.CompareTo(dateStr) == 0
    && w.LATITUDE.CompareTo(latitude) == 0
    && w.LONGITUDE.CompareTo(longitude) == 0
    orderby w.TIMETM
    select new { w.RADIATION, w.TIMETM };
    break;
    case 2:
    var query = from w in db.TEMPRETURE
    where w.DATEDT.CompareTo(dateStr) == 0
    && w.LATITUDE.CompareTo(latitude) == 0
    && w.LONGITUDE.CompareTo(longitude) == 0
    orderby w.TIMETM
    select new { w.TEMPRETURE, w.TIMETM };
    foreach (var item in query)
    {
        var resultItem = new { TEMPRETURE = item.TEMPRETURE, TIME = item.TIMETM };
        results.Add(resultItem);
    }
    break;
    case default:
    break;
}

这两个查询针对的是两个不同的表。所以我不知道如何确定IQueryable中的Type T。此外,我选择 的是一个使用new { PropertyName = propertyValue } 的匿名对象。 无论如何,如果我坚持使用相同的名称query

最佳答案

声明 var让您缩短代码,但您声明的变量保持静态类型,并且该变量的范围不会改变。

如果需要使用switch之外的变量, 在 switch 之前声明它语句,像这样:

IQueryable<SomeType> query = null;
switch (...) {
    case 1: query = ...; break;
    ...
    default: ...
}

现在您可以使用 query外面switch .

注意:有些情况下您必须使用 var因为您分配给它的类型没有名称,但在您的第一种情况下,该类型有一个名称,因此您不需要使用 var .

编辑: 但是,您的第二个案例确实需要 var ,因为您选择的是匿名类型。在这种情况下,有几种方法可以解决此问题:

  • 您可以为所选列的“超集”声明命名类型(即 TIMETMTEMPERATURERADIATION),或者
  • 在 .NET 4.0 中,您可以使用 IQueryable<dynamic> .这将一些编译时检查转移到运行时,但如果您必须走这条路,那将非常方便。

关于c# - 如何在 C# 中重用 "var"声明的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17416488/

相关文章:

c# - 跨多个用户使用 'dynamic' 静态属性?

javascript - 如何运行 Javascript 中存储在变量中的动态生成函数

c# - 检查两个列表是否有相同的项目

c# - ASP.NET MVC - 模型接口(interface)

c# - 使用 LINQ 将 double[][][] 初始化为 double[1][2][3]

python - Python 中带有 pandas + statsmodels 的 VAR 模型

r - 从 var 输出中提取系数和方差-协方差矩阵(用 vars 包估计)

c# - 如何使用 C# 代码从 teamcity 8.1.2 下载工件

c# - 具有多个键和每个键的多个值的字典

c# - 将文本添加到带有图标的按钮