2012-12-30 135 views
1

聲明var裏面我有這個var,但我想改變它的內容取決於聲明,我不能得到它的工作,因爲當我使用它時,VS說它沒有被聲明,即使聲明是真實的......如果聲明c#

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天此

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

你要在哪裏使用它?在「if」或「else」塊內部?或者外面? –

+0

永遠不要在if語句中聲明變量,大多數編譯器會阻止你這樣做。首先聲明變量,然後根據語句更改它。 –

+0

「DateTime.Today.Day」如何在同一時間大於28且小於2? –

回答

8

聲明,如果聲明的範圍之外的變量:

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); 
} 
+1

可能想讓'IEnumerable 天' –

+0

Ahem,啊......謝謝。 –

+0

葉科爾與科裏糾正和你的答案!謝謝! –

2

聲明if塊之外的變量(不指定值 - 在這種情況下,您不能使用var,但必須指定類型),然後僅在其中指定一個值。

1

沒有什麼不對您的代碼,因爲它是現在 - 你可以很容易地var或明確指定任何塊內部的類型,包括定義varables if

可能發生的情況是您試圖在定義的塊之外使用此可變比(即在if語句之後),即days變得未定義。

修復:定義if以外的變量,但您需要顯式類型。如果你有ReSharper,它允許在var /顯式類型之間輕鬆改變。否則,你必須弄清楚自己的類型(在你的情況下它就是IEnumerable<DateTime>)。