c # Быстрый способ отменить все параметры - PullRequest
1 голос
/ 24 февраля 2012

У меня есть приложение на C # winform, которое много вычисляет.есть кнопка «запустить», чтобы запустить процесс.Я хотел бы иметь возможность «повторно запустить или повторно запустить или повторно представить» информацию без необходимости перезапуска программы.Проблема в том, что у меня много переменных, которые необходимо сбросить.Есть ли способ отменить (сбросить) все параметры?

private Double jtime, jendtime, jebegintime, javerage, .... on and on

Ответы [ 4 ]

5 голосов
/ 24 февраля 2012

Создать экземпляр объекта, в котором хранятся эти переменные.Обращайтесь к этому объекту, и, когда вы захотите «сбросить», восстановите ваш объект.например,

public class SomeClass
{
   public double jTime;
   ...
}

...

SomeClass sc = new SomeClass();
sc.jTime = 1;
sc = new SomeClass();
1 голос
/ 24 февраля 2012

Вы можете использовать Reflection;хотя Reflection менее эффективен, чем другие предлагаемые решения, но я не совсем уверен в вашей области решения, и Reflection может быть хорошим вариантом.

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Data data = new Data();

            //Gets all fields
            FieldInfo[] fields = typeof(Data).GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance | BindingFlags.DeclaredOnly);

            foreach (var field in fields)
            {
                //Might want to put some logic here to determin a type of the field eg: (int, double) 
                //etc and based on that set a value

                //Resets the value of the field;
                field.SetValue(data, 0);
            }

            Console.ReadLine();
        }

        public class Data
        {
            private Double jtime, jendtime, jebegintime, javerage = 10;
        }
    }
}
1 голос
/ 24 февраля 2012

Лучший способ был бы, если бы у вас были все в классе.
Тогда при перезагрузке вы просто создали бы новый класс с инициализированными значениями.

0 голосов
/ 24 февраля 2012

Да, просто используйте метод рефакторинга Extract Method. В основном извлекаем логику сброса в отдельный метод, а затем просто вызываем ее, когда нужно

private void ResetContext()
{
   jtime = jendtime = jebegintime = javerage = 0;
}
...