Выполнение метода по параметру в C # - PullRequest
1 голос
/ 20 октября 2010

Начну с того, что понятия не имею об этом или о том, возможно ли это (я уверен, что это возможно).

У меня есть кусок кода, который в основномследует:

DataTable dt = new DataTable();

if (string = "this")
    dt = method1();
else if (string = "that")
    dt = method2();
else if (string = "somethingelse")
    dt = method3(datetime, datetime2);
else if (string = "anotherthing")
    dt = method4(string);
....and so on....

Я пытаюсь сделать это чище.Строка сравнения находится в таблице.Я подумал бы сделать что-то более похожее на следующее:

if (row.parmtype = "date"){
   dt = row.method(datetime, datetime2);
else
   dt = row.method();

Таким образом, метод, который я вызываю, будет сохранен в таблице вместе с типом вызова (пока только 3 типа).Каждый вызов возвращает DataTable.Могу ли я получить образец еще лучше, ресурс о том, как это сделать?

Поймите, что, поскольку я не знаю, о чем говорю, приведенный выше код не является точно тем, что я ищу, но с целью донести свою мысль.

Ответы [ 3 ]

2 голосов
/ 20 октября 2010

вы можете сделать словарь, как

var delegates = new Dictionary<string, Func<MyClass, DataTable>>()
                                {
                                    {"somestr", x => x.Method1()}
                                };

            if (delegates.ContainsKey(key))
                delegates[key](this);
1 голос
/ 20 октября 2010

У вас есть пара опций (вне моей головы), которые работают практически в любой версии фреймворка:

  • Измените свою вложенную структуру "если" на переключатель
  • Вы можете использовать отражение над объектом, если вы вызываете известные функции для объекта
  • Наконец, вы можете использовать Шаблон команды дляреализуйте общую функцию «execute» и делайте, как вы описали выше, передавая команду и данные объекту и позволяя ему решать, что делать.
  • Вы также можете изучить использование делегатов и событий в зависимости от ваших потребностей

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

В .NET 4.0 (возможно, 3.5) вы также можете взглянуть на использование динамических деревьев и деревьев выражений, чтобы сделать что-то подобное, но это может бытьбольше кода, чем вы хотите написать для текущей реализации.

0 голосов
/ 20 октября 2010

Вы, вероятно, ищете делегатов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...