Loading...
TanyaZheleva avatar TanyaZheleva 354 Точки

[C# OOP Basics] Encapsulation - Problem 04. Shopping Spree

Проблемът е, че винаги дава ексепшън "Name cannot be empty", независимо какво му подавам.

Пробвах да взема хората и продуктите по различни начини (Split/Regex), но дава същото съобщение. Странно е, че с това решение минава последния тест в джъдж, както и един от нулевите.

http://pastebin.com/SGXQU9kf

Тагове:
0
C# OOP Basics
AntyfrizZz avatar AntyfrizZz 238 Точки
Best Answer

Здравей,

 

1) Никъде не инициализираш BagOfProducts в Person класа. Трябва да го направиш в конструктора на класа

2) Проверката за имената трябва да е IsNullOrWhiteSpace (и за 2та класа)

3) В BuyProduct метода, в съобщението което хвърляш при невалидна операция, не трябва да позлваш nameof(this.Name), а само this.Name. Това се отнася и за продукта

4) В този метод никъде не изписваш ако някой е купил успешно продукт "{this.Name} bought {product.Name}"

5) В конструктора на Product класа задаваш стойност на пропъртито да е равна на полето му, а не на подадения от вън през конструктора стринг.

6) Съобщението, което хвърляш при негативна цена е грешно. Не трябва да използваш nameof(this.Cost) и има правописна грешка в думата "nagative"

7) Сложила си кода си в try catch, но той хваща само ArgumentException, а метода BuyProduct ти хвърля InvalidOperationException и ти гърми програмата

8) Когато принтираш кой какво е купил, не трябва да позлваш person a person.Name

 

И няколко съвета:

1) В съобщението за невалидно име използваш {nameof(this.Name)}, което не е нужно. Това не е променлива за всеки клас, а си е просто Name. (отнася се и за 2та класа)

2) В сетъра на BagOfProducts е написано value = new List<Product>();. Това не е ок. value ти се подава отвън. В момента каквото и да подадеш, ще се дефинира празен лист с продукти. Махни го този ред.

3) BagOfProducts може да е с автоматично пропърти.

4) Сетърите на всички пропъртита са публични. Ако не се лъжа пишеш домашно за Encapsulation :)

5) Добре е BuyProduct метода да не е void, а да връща string и някой друг да го обработва (в случая да го принтира)

6) Листа с хора и продукти е добре да се направи Dictionary<string, Person> и Dictionary<string, Product>, като string-а е името на person/product. Така ще имаш по - лесен достъп до тях и ще си спестиш обхожданията на листове с ".Where(p => p.Name == name).FirstOrDefault();"

 

Поздрави!

 

1
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.