#c# #arrays #stopwatch
#c# #массивы #секундомер
Вопрос:
У меня есть секундомер, хранящийся в массиве объектов, и я хочу перезапустить его. Я использую массив объектов, потому что типы моих элементов постоянно меняются, что означает, что object [1] иногда может быть int, иногда double, иногда bool и т.д., Поэтому я не уверен, могу ли я использовать класс для этого.
Итак, почему секундомер не перезапускается в приведенном ниже коде?
public static object[] test()
{
object[] obj = new object[4];
obj[0] = true; //bool;
obj[1] = "test"; //string;
obj[2] = 12; //int;
obj[3] = System.Diagnostics.Stopwatch.StartNew();
return obj;
}
object[] testobject = new object[4];
testobject = test();
Thread.Sleep(1000);
Console.WriteLine(((Stopwatch)testobject[3]).Elapsed.TotalMilliseconds);
((Stopwatch)testobject[3]).Restart(); //Reset();
Console.WriteLine(((Stopwatch)testobject[3]).Elapsed.TotalMilliseconds);
Комментарии:
1. Так и должно быть. Это реальный код?
2. Помимо перемещения нижнего блока кода в метод main и добавления необходимых инструкций using, этот код отлично работает как есть в совершенно новом консольном проекте.
3. Закрытие как невоспроизводимое. Происходит что-то еще, чего не видно из предоставленной информации.
4. Это фактический код. У меня просто есть оператор if, который проверит, является ли object [0] истинным, а затем перезапустит секундомер. В инструкции if у меня есть консольная запись, которая доказывает, что в инструкциях if указано, но секундомер не перезапускается в инструкции if. Однако секундомер перезапускается вне инструкции if… Я не знаю, что не так
5. Что ж, я нашел решение. Я объявил секундомер как глобальную переменную, а затем обрабатываю его где угодно вместо того, чтобы иметь его в массиве. Это, однако, не отвечает на вопрос выше, но поскольку решение было дано, вы можете закрыть этот поток.