Запустите правильный метод на основе имени файла (C #) - PullRequest
3 голосов
/ 02 июля 2019

Я проверяю имя file и возвращаю TRUE, если оно верно:

bool name_FORD = file.Contains("FORD"); 
bool name_KIA  = file.Contains("KIA");  
bool name_BMW  = file.Contains("BMW");

Исходя из этого, я хочу, чтобы переключился и работал правильно method.Но я запутался, как правильно это сделать:

switch (true)
{
 case 1 name_FORD: 
              method1();
              break();
 case 2 name_KIA:
              method2();
              break();
 case 3 name_BMW:
              method3();
              break();
}

Ответы [ 2 ]

4 голосов
/ 02 июля 2019

Я предлагаю организовать все строки и соответствующие методы как Dictionary:

Dictionary<string, Action> myCars = new Dictionary<string, Action>() {
  {"FORD", method1}, // e.g. {"FORD", () => {Console.WriteLine("It's Ford!");}},
  { "KIA", method2},
  { "BMW", method3}, 
  //TODO: Put all the cars here
};

тогда мы можем поставить простой цикл:

foreach (var pair in myCars)
  if (file.Contains(pair.Key)) { // if file contains pair.Key
    pair.Value();                // we execute corresponding method pair.Value

    break; 
  }

Редактировать: Если у нас могут быть сложные методы (например, метод может требовать file и key параметров), мы можем изменить сигнатуру:

// Each action can have 2 parameters: key (e.g. "FORD") and file
Dictionary<string, Action<string, string>> myCars = 
  new Dictionary<string, Action<string, string>>() {
     {"FORD", (key, file) => {Console.Write($"{key} : {string.Concat(file.Take(100))}")}}, 
     { "KIA", (key, file) => {Console.Write($"It's {key}!")}},
     { "BMW", (key, file) => {/* Do nothing */}}, 
  //TODO: Put all the cars here
};

При выполнении в цикле мы должны предоставить следующие параметры:

foreach (var pair in myCars)
  if (file.Contains(pair.Key)) { // if file contains pair.Key
    pair.Value(pair.Key, file); // we execute corresponding method pair.Value

    break; 
  }
0 голосов
/ 02 июля 2019

Вы можете использовать такие методы, как переменные в c #, назначив их для действия:

public void KiaMethod(){
  Console.WriteLine("Kia");
}
public void BmwMethod(){
  Console.WriteLine("BMW");
}

Action method = null;
if(file.Contains("KIA"))
  method = KiaMethod;
else if(file.Contains("BMW"))
  method = BmwMethod;

method();

Хотя я действительно одобряю шаблон в ответе Кейрана, потому что я не понимаю, зачем вам нужен этот уровеньсложность

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