Почему бы просто не иметь Dictionary<string, double>
? Это сделает намного более простой код - вы отделили данные от кода поиска.
private static readonly Dictionary<string, double> BathRoomMap =
new Dictionary<string, double>
{
{ "1", 1 },
{ "One", 1 },
{ "OneAndHalf", 1.5 },
{ "1.5", 1.5 },
{ "1 1/2", 1.5 }
// etc
};
private static string MapBathRooms(string value)
{
double result;
if (!BathRoomMap.TryGetValue(value, out result))
{
return value; // Lookup failed
}
return result.ToString();
}
На самом деле, вы можете сделать это еще проще, избегая вызова ToString - просто сделайте его Dictionary<string, string>
:
private static readonly Dictionary<string, string> BathRoomMap =
new Dictionary<string, string>
{
// Note: I've removed situations where we'd return the
// same value anyway... no need to map "1" to "1" etc
{ "One", "1" },
{ "OneAndHalf", "1.5" },
{ "1 1/2", "1.5" }
// etc
};
private static string MapBathRooms(string value)
{
string result;
if (!BathRoomMap.TryGetValue(value, out result))
{
return value; // Lookup failed
}
return result;
}
Как говорит ChrisF, вы также можете прочитать это из файла или другого ресурса.
Преимущества этого:
- Это намного легче избежать ошибок и расширяться, ИМО. Существует простое отображение 1: 1 от входа к выходу, в отличие от логики, которая может пойти не так
- отделяет данные от логики
- Позволяет загружать данные из других мест, если это необходимо.
- Поскольку инициализаторы коллекции используют
Dictionary<,>.Add
, если у вас есть дубликат ключа, вы получите исключение при инициализации типа, поэтому вы сразу же обнаружите ошибку.
Скажем так: вы бы когда-либо рассматривали возможность рефакторинга из версии на основе словаря в версию "много реального кода"? Я бы точно не стал.
Если вы действительно, действительно хотите иметь все это в методе, вы всегда можете использовать оператор switch:
private static string MapBathRooms(string value)
{
switch (value)
{
case "One":
return "1";
case "OneAndHalf":
case "1 1/2":
return "1.5";
...
default:
return value;
}
}
Я бы все-таки сам использовал форму словаря ... но это имеет очень небольшое преимущество, так как обнаружение дубликатов переносится на время компиляции .