2016-09-27 105 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。因此,您的初始代码中的异常以及此修改版本的奇怪结果。 –

相关问题