a имеет внешнюю dll, которая возвращает массив информации о пользователе в зависимости от предоставленных элементов. Простой код для этого, может быть:Лучший способ рефакторинга получить доступ к элементам массива
private string userName;
private int userAge;
const string NAME = "NAME";
const string AGE = "AGE";
string[] arrID = { NAME, AGE }; //IDs to get name and age, to get surname please add "SURNAME" to the array
User[] users;
string[] results; //OK - item found, Unknown - item id not found
////////read from external dll////////
databaseAccessor.GetUsers(arrID, out users, out results);
//////////////////////////////////////
int itemNameIndex = Array.IndexOf(arrID, NAME);
int itemAgeIndex = Array.IndexOf(arrID, AGE);
if(results[itemNameIndex] == "OK")
{
userName = users[itemNameIndex].Name;
}
if(results[itemAgeIndex] == "OK")
{
userAge = users[itemAgeIndex].Age;
}
Мне не нравится этот код, как должен быть добавлен новый пункт, если при попытке получить новый пользователь «особенность», например, высота. Одна вещь, которая не может быть изменена, - это вызов внешней dll. databaseAccessor.GetUsers(arrID, out users, out results);
Что было бы лучшим способом реорганизовать его, чтобы избежать добавления новых ifs?
Покажите нам, как выглядит класс 'User'. – ViRuSTriNiTy
Я не понимаю, что такое содержимое массива результатов и массив пользователей ... Похоже, что массив результатов содержит результат для каждого запрашиваемого поля (например, «НАЗВАНИЕ» и «ВОЗРАСТ»), но вы получаете доступ к user array с тем же индексом (itemNameIndex и itemAgeIndex). Не могли бы вы привести пример содержимого массива, возвращаемого вашей внешней DLL? – Quido