2015-01-13 4 views
3

Я пытаюсь вызвать Restart() на секундомере инстанции, но я получаю следующее сообщение об ошибке при попытке вызвать его:Почему я не могу использовать секундомер.Restart()?

активов/Сценарии/Управление/SuperTouch.cs (22,59): CS1061 об ошибке: Тип System.Diagnostics.Stopwatch' does not contain a definition for Restart «и не метод расширения 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(); 
      } 
    } 
} 
+0

У вас есть 'System.Diagnostics' в ваших проектных ссылках? – Abhishek

+3

Вы используете Framework 3.5 случайно? –

+0

Как @NadiaChibrikova сказал, что если вы используете версию Framework меньше 4, у вас нет метода 'Restart()' для 'StopWatch'. Вам нужно будет сделать 'StopWatch.Reset()', а затем 'StopWatch.Start()' – Abhishek

ответ

5

Я предполагаю, что вы используете .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 

StartNew статический метод уже существует на .Net Framework 2.0

Более подробно о методе 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 
    } 
} 
+0

Ответ Рууда тоже хорош, но этот напомнил мне, как я могу использовать методы расширения, чтобы добавить отсутствующий метод. –

+0

Стоп, за которым следует Start, не сбрасывает прошедшее время. Должно быть Сброс, за которым следует «Старт». – yoyo

7

Я предполагаю, что вы используете раму pre 4.0, что означает, что вам нужно будет использовать Reset и Start вместо Restart.

0

Единство Двигатель использует подмножество .NET 2.0. Как указывали другие, в .NET 4.0 был добавлен Restart. This useful page показывает все функции .NET, которые можно безопасно использовать. Как видите, есть Start и Reset.

Смежные вопросы