2016-07-26 106 views
2

我正在寫一個小程序作爲跑道的一部分,作爲課程的一部分。 我遇到的問題是,當我嘗試編譯時,我的Duration()方法在我的Program.cs類中得到了Cannot convert from void to bool。 該方法應返回TimeSpanC#無法從void轉換爲布爾 - CS1503

我看不到它在哪裏被設置爲void。也許在C#運行時更低一級?不確定。

Program.cs

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 

namespace Stopwatch 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var stopwatch = new StopWatchController(); 
      stopwatch.Start(); 
      stopwatch.Start(); // Second Start() method should throw an exception 
      stopwatch.Stop(); 
      Console.WriteLine(stopwatch.Duration()); // Error appears here 
     } 
    } 
} 

StopwatchController.cs

using System; 
using System.Runtime.CompilerServices; 

namespace Stopwatch 
{ 
    public class StopWatchController 
    { 
     private DateTime _startTime; 
     private DateTime _finishTime; 
     private TimeSpan _duration; 
     private bool _isWatchRunning; 

     public void Start() 
     { 
      if (!_isWatchRunning) 
      { 
       _isWatchRunning = !_isWatchRunning; 
       _startTime = DateTime.Now; 
      } 
      else 
      { 
       throw new Exception("InvalidArgumentException"); 
      } 
     } 

     public void Stop() 
     { 
      _isWatchRunning = false; 
      _finishTime = DateTime.Now; 
     } 

     public void Duration() // I'm an idiot 
     { 
      _duration = _finishTime - _startTime; 
     } 
    } 
} 
+4

持續時間()是一種無效的方法,但你嘗試的WriteLine它。這不會很好。 –

+2

你的意思是「公共TimeSpan持續時間()」? – 2016-07-26 14:24:46

+2

你必須要密碼:P – BugFinder

回答

8

Duration應該返回TimeSpanConsole.WriteLine使用:

public TimeSpan Duration() 
    { 
     return _duration = _finishTime - _startTime; 
    } 

    ... 

    Console.WriteLine(stopwatch.Duration()); 
+0

雖然沒有必要保留和設置'_duration',因爲它從未被使用過。 – Shautieh

+0

我覺得自己像個白癡。不能相信我錯過了這一點。顯然這將返回無效!謝謝。 –

+2

需要注意的是,如果原始異常提到將void從void轉換爲bool,那是因爲它會搜索Console.WriteLine的第一個(按字母順序排列的)方法簽名(因爲它沒有用於「void」參數)一個'bool'。 – Kilazur

相關問題