Професионална програма
Loading...
galin.s avatar galin.s 11 Точки

[C# OOP}try-catch, if, while.. проверка от console.readline през друг клас - как?

пичове и дами - един въпрос:

https://github.com/galin-s/CSharpSamples/tree/master/Students

има ли вариант, в който за firstname и lastname от input в program да се направи проверка в student дали са null и, ако са - конзолата да ми вади съобщения "вкарай име", докато наистина взема, че вкарам име?
пробвах с while, do-while - цикълът сработва само веднъж, после си продължава с другите въпроси.
if-ът пък го пробвах за екссепшън - грам не го интересува въведено ли е нещо, или не - директно си изкарва изключение.
и с try-catch - същото.
изобщо - къде ми се губи връзката при console.readline, който шсе обработва в друг клас?
благодаря за вниманието и приятен уикенд wink
 

Тагове:
1
Fundamentals Module
galin.s avatar galin.s 11 Точки

смесих ви съветите, плеснах в сетъра

 while(string.IsNullOrWhiteSpace(value))
                {
                    Console.WriteLine("You must enter a first name: ");
                    value = Console.ReadLine();
                }

и заспа.

ако знаех тая проверка string.IsNullOrWhiteSpace(value) - щях да си спестя доста време хехе

благодаря и на двамата yes

0
quickben avatar quickben 974 Точки

Моля те не го прави това ;)

http://pastebin.com/gv81E1bu - това ти е в Main Метода или нещо подобно.

В сетъра на обекта само проверяваш дали входа е верен ако не е верен хвърляш exception.

Сетъра е един метод, а един метод или трябва да си върши работата или да известява, че не може да си свърши работа(хвърляне на exception примерно), друг принцип който нарушаваш е, че един метод трябва да върши само едно нещо а в твоя случай сетъра се грижи както за валидация така и за взимане на инпут което не е добре, и допълнително създаваш голямо dependancy между обекта и конзолата, сиреч Student-a ти вече не работи без да има референция към конзолата, днес е конзолата която я имаш по подразбиране утре ще е нещо друго което няма да го имаш ей така :)

 Console.WriteLine('Invalid player name'); иаваскрипт хас руинд ми :)

2
05/12/2015 13:33:02
kosio197 avatar kosio197 104 Точки

Тук сме на едно мение с колегата - "Моля те не прави това :)"  - Ако този клас примерно ще се пълни с данни от файл, а не от конзолата? Написано по този начин е не само е обвързано с конзолата, но и с формата на данните (може примерно да поискаш да ги подаваш всичките данни на един ред ...)

2
galin.s avatar galin.s 11 Точки

добре, добре - трия го, само мир да има laugh

правилно ли разбирам, че цялата идея да се лупва "опитай пак" е грешна?

0
quickben avatar quickben 974 Точки

не идеята а изпълнението в сетъра на обекта

1
kosio197 avatar kosio197 104 Точки

Грешиш :)

Много често го има това с "Опитай пак" , но не се прави в setter. В конкретната задача това, което ти е дал колегата е ОК - цикъла да е в main класа.

Ние това което коментираме е къде да се направи конкретната проверка за дадена стойност с if или с try/catch който вика класа да си прави валидацията, но самия цикъл + четенето на входа при всички случаи е в главния клас.

2