2016-09-27 112 views
0

我知道還有很多其他人基本問這個確切的問題,但由於某種原因,他們的所有答案都不起作用。我的代碼如下:C#使用未分配的局部變量異常

bool timerRun = false; 
DateTime startTimer, endTimer; 
TimeSpan span; 

if(timerRun == false){ 
    startTimer = DateTime.Now; 
    timerRun = true; 
} 
if(timerRun == true){ 
    endTimer = DateTime.Now; 
    timerRun = false; 
    span = endTimer - startTimer; //can also be span = endTimer.Subtract(startTimer); 
    Console.WriteLine(span.ToString()); 
} 

的timerRun布爾連接到一個按鈕,每按一次,從真變爲假,反之亦然。

但是,每當我運行它,它給我的錯誤「使用未分配的本地變量'startTimer'」。我不知道該如何處理這個問題,因爲沒有人似乎有這個問題。我知道這可能是我的一個新手錯誤,但請原諒我這讓我瘋狂。
感謝

編輯:現在我已運行的通過成爲一個if-else語句,改變

DateTime startTimer, endTimer; 
TimeSpan span; 

DateTime startTimer = new DateTime(), endTimer = new DateTime(); 
TimeSpan span = new TimeSpan(); 

但不是寫變量跨度控制檯,它輸出endTimer(日期時間)。

+0

我可以問爲什麼你有兩個if語句呢?因爲你將布爾值設置爲一個使得它無論如何都能進入兩個語句的狀態 – Sayse

+1

這不是完整的代碼,是嗎? –

+0

您需要將您的DateTime變量標識爲Global,以使它們保持活動狀態,整個容器對象處於活動狀態。或另一個類中的靜態變量,它在GUI的生命週期內保持加載到內存中 –

回答

0

startTimerendTimer是當地感興趣的方法,按我的理解。這是行不通的,因爲你必須在整個調用這個方法時保持startTimer的狀態,否則它將在每次調用時重新初始化。 timerRun一樣。讓他們成爲你的班級的領域:

public class MyClass 
{ 
    private DateTime startTimer; 
    private bool timerRun = false; 

    public void Button_Clicked(...) 
    { 
    if(!timerRun) 
    { 
     startTimer = DateTime.Now; 
     timerRun = true; 
    } 
    else 
    { 
     DataTime endTimer = DateTime.Now; 
     timerRun = false; 
     TimeSpan span = endTimer - startTimer; 
     Console.WriteLine(span.ToString()); 
    } 
    } 
} 
+0

不知道我做什麼,但這個工作...... o.O –

+0

@LachlanMather促進這兩個變量類字段意味着它們的值不會「消失」當你離開的方法。他們現在是你的對象的「狀態」的一部分,你可以在這個類的所有方法中以一致的方式使用它們。這些是基本的面向對象的概念。如果您打算定期使用C#語言,那麼現在是時候閱讀更多關於C#語言的內容了? –

1

使用if-else構造來代替兩個if。這將確保兩個塊中只有一個被執行。爲startTimer和endTimer提供初始值。

bool timerRun = false; 
DateTime startTimer = new DateTime(<year>,<month>,<day>,<hour>,<minute>,<second>); 
DateTime endTimer = new DateTime(<year>,<month>,<day>,<hour>,<minute>,<second>); 
TimeSpan span; 

if(timerRun == false){ 
    startTimer = DateTime.Now; 
    timerRun = true; 
} 
else{ 
    endTimer = DateTime.Now; 
    timerRun = false; 
    span = endTimer - startTimer; //can also be span = endTimer.Subtract(startTimer); 
Console.WriteLine("Difference in hours " + span.TotalHours); 
} 
+0

它不輸出差異,它現在輸出endTimer。但它現在實際上部分工作。 –

+0

將Console.WriteLine移到了if-else之外。現在檢查 –

+0

@LachlanMather我懷疑你的'timerRun'在你第一次點擊按鈕之前有些設置爲true。因此,您的初始代碼中的異常以及此修改版本的奇怪結果。 –

相關問題