【问题标题】:declaring var inside if statement c#在 if 语句 c# 中声明 var
【发布时间】:2012-12-30 23:36:26
【问题描述】:

我有这个 var,但我想根据语句更改它的内容,我无法让它工作,因为当我使用它时,VS 说它没有被声明,即使语句是真的......

if (DateTime.Today.Day > 28 && DateTime.Today.Day < 2)
{
    var days = GetDaysLikeMe(DateTime.Today).Take(50).Where(d => d.Date.Day > 28 && d.Date.Day < 2).Take(4);
}
else
{
    var days = GetDaysLikeMe(DateTime.Today).Take(50).Where(d => d.Date.Day < 28 && d.Date.Day > 2).Take(4);
}

编辑:

我尝试在框外声明变量...但也无法正常工作,我在 var days 上保留的函数是这个

    public IEnumerable<DateTime> GetDaysLikeMe(DateTime currentDate)
    {
        DateTime temp = currentDate;
        while (true)
        {
            temp = temp.AddDays(-7);
            yield return temp;
        }
    }

【问题讨论】:

  • 你想在哪里使用它?在ifelse 块内?还是在外面?
  • 永远不要在 if 语句中声明变量,大多数编译器会阻止你这样做。先声明变量,然后根据语句进行更改。
  • DateTime.Today.Day 怎么可能同时大于 28 又小于 2?

标签: c# variables


【解决方案1】:

在if语句范围之外声明变量:

IEnumerable<DateTime> days;

if (DateTime.Today.Day > 28 && DateTime.Today.Day < 2)
{
    days = GetDaysLikeMe(calendario.Value.Date).Take(50).Where(d => d.Date.Day > 28 && d.Date.Day < 2).Take(4);
}
else
{
    days = GetDaysLikeMe(calendario.Value.Date).Take(50).Where(d => d.Date.Day < 28 && d.Date.Day > 2).Take(4);
}

【讨论】:

  • 可能想做那个IEnumerable&lt;DateTime&gt; days
  • 你与 Cory 校正和你的答案一起工作!谢谢!
【解决方案2】:

在 if 块之外声明变量(不赋值 - 但在这种情况下你不能使用 var,你必须指定类型),然后只在里面给它赋值。

【讨论】:

    【解决方案3】:

    您的代码现在没有任何问题 - 您可以使用 var 轻松定义变量或在任何块内显式指定类型,包括 if

    可能发生的情况是您试图在它定义的块之外使用这个变量(即在if 语句之后),这就是days 变得未定义的地方。

    修复:在 if 之外定义变量,但您需要在那里显式类型。如果你有 ReSharper,它允许在 var/explicit 类型之间轻松切换。否则,您必须自己弄清楚类型(在您的情况下,它是 liklye IEnumerable&lt;DateTime&gt;)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-04
      相关资源
      最近更新 更多