为什么我无法使用stopwatch.Restart()?

时间:2015-01-13 01:30:29

标签: c# unity3d

我正在尝试在秒表实例上调用Restart(),但在尝试调用时遇到以下错误:

  

Assets / Scripts / Controls / SuperTouch.cs(22,59):错误CS1061:类型   System.Diagnostics.Stopwatch' does not contain a definition for 重新启动'并且找不到扩展方法Restart' of type System.Diagnostics.Stopwatch'(您是否错过了使用   指令或程序集引用?)

这是我的代码:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;

namespace Controls
{

    public class SuperTouch
    {
            public Vector2 position { get { return points [points.Count - 1]; } }
            public float duration { get { return (float)stopwatch.ElapsedMilliseconds; } }
            public float distance;
            public List<Vector2> points = new List<Vector2> ();

            public Stopwatch stopwatch = new Stopwatch ();

            public void Reset ()
            {
                    points.Clear ();
                    distance = 0;
                    stopwatch.Restart ();
            }
    }
}

4 个答案:

答案 0 :(得分:9)

我猜你使用pre 4.0框架,这意味着你必须使用ResetStart代替Restart

答案 1 :(得分:6)

我猜你正在使用.Net Framework 3.5或更低Restart Stopwatch方法不存在的地方。

如果你想复制相同的行为,可以像这样做。

Stopwatch watch = new Stopwatch();
watch.Start();
// do some things here
// output the elapse if needed
watch = Stopwatch.StartNew(); // creates a new Stopwatch instance 
                              // and starts it upon creation

.Net Framework 2.0

上已存在StartNew静态方法

有关StartNew方法的更多详细信息,请访问:Stopwatch.StartNew Method

或者,您也可以为自己创建一个扩展方法。

这是一个模型和用法。

public static class ExtensionMethods
{
    public static void Restart(this Stopwatch watch)
    {
        watch.Stop();
        watch.Start();
    }
}

一样消费
class Program
{
    static void Main(string[] args)
    {
        Stopwatch watch = new Stopwatch();
        watch.Restart(); // an extension method
    }
}

答案 2 :(得分:0)

Unity Engine使用.NET 2.0的一个子集。正如其他人所说,在.NET 4.0中添加了RestartThis useful page显示了可以安全使用的所有.NET函数。如您所见,StartReset存在。

答案 3 :(得分:0)

使用扩展方法,而不是调用多个方法(容易发生人为错误)。

  public static class StopwatchExtensions
  {
    /// <summary>
    /// Support for .NET Framework <= 3.5
    /// </summary>
    /// <param name="sw"></param>
    public static void Restart(this Stopwatch sw)
    {
      sw.Stop();
      sw.Reset();
      sw.Start();
    }
  }