ну тут злой умысел будет налицо.. а вот если он таки сподобится загрузить список из какой-то базы/файла итд и катапейстнет свой IReadOnlyDictionary loadCityCodeByCityName() из Вашего примера string GetCityCodeByCityName() заменив catch { return "000000000"; } на catch { return null; } а к базе законектится в продакшене не получится...Prosche wrote: 10 Jan 2018 18:40Будет, что логично, нет словаря, нет и результата, но v приватный (по умолчанию в шарпе) член класса, т.е. изменить снаружи класса его нельзя. Можно конечно изнутри. Если это проблема, можно сделать интерфейс с гетером и обращаться через него, но это уже немного паранойя, потому что с таким же успехом враг может и просто саму функцию заменить:geek7 wrote: 10 Jan 2018 16:35я в сишарпном синтаксисе не копенгаген, но если кто-то v = null; сделает, то GetCityCodeByCityName на все города будет выдавать "000000000" (как и на аргумент null )?Prosche wrote: 10 Jan 2018 03:19Code: Select all
static IReadOnlyDictionary<string,string> v = new Dictionary<string, string>() { {"МОСКВА","000000010"}, {"ХИМКИ", "000000193"}, {"САНКТ-ПЕТЕРБУРГ","000000001"} }; private static string GetCityCodeByCityName(string name) { try { return v[name.ToUpper()]; } catch { return "000000000"; } }
извиняюсь за глупый вопрос
private static string GetCityCodeByCityName(string name)
{
return "000000000";
}
![]()
то имеем "всё работает в деве, в продакшене все города возвращают "000000000"" и 2 проглоченные эксепшены - одна индусом о коннекте к базе, другая Вами о налпойнтере....как-то так
короче: булет-пруфт код тоже может оказатся неполезным
PS Я правильно понимаю, что в Вашем варианте Dictionary вернёт null на город "зажопинск", а Димин пример "000000000" ? а если у них юнит-теста на несуществующий город нет?
PPS вот глянул на свою писанину.. и возникло ощущение что я фалометрией занялся
![Embarassed :oops:](./images/smilies/blush.gif)
![Crying or Very sad :cry:](./images/smilies/cray.gif)
![Embarassed :oops:](./images/smilies/blush.gif)