"?" след края на даден тип


1

Здравейте,

Някой може ли да ми обясни какво означава "?" след края на даден тип?

Например - int?, double? 

Не мога да го схвана.

Благодаря!




Отговори



2
Този въпросителен знак означава, че стойността може да бъде null. За повече информация клик

от kalbo_17 (2709 точки)


1
Означава, че на променлива от този тип може да се присвоява стойност null.

от pacho10 (120 точки)


1
Значи,че дадения тип данни може да бъде със стойност null , което принципno не е възможно например за int.  
Повечко информация  тук :) 



2
Здрасти, тъй като според мен е по - лесно явно да ти се даде линк без особено обяснение, през който твърде вероятно вече си минал :) ще се опитам да го обясня така както аз го намирам, а пък после някой човек с повече опит като Иво може да каже кой къде бърка :)

 Понякога може да ти се наложи да работиш със стойностен тип (value type), който няма  точно дефинирана стойност в определени обстоятелство. Тоест, ако приемем, че работиш с int, той винаги ще има определена стойност - 0, 125, - 129 ... Може да имаш определен вид логика някъде в приложението, при която трябва да провериш най - вероятно в някаква база данни дали имаш поле, което вече има някаква стойност  или все още няма такава, в нашия случай с int, ако имаме стойност тя ще бъде някоя от range на числото, ако няма ще бъде просто null. Тъй като 0 реално погледнато е стойност и би ти объркала сметките някъде, по - добре е за теб да имаш null.

С други думи, като си сложиш една питанка след типа, все едно му слагаш един feature отгоре и му даваш възможност да има още 1 стойност, която вече може да вземаш с properties, които идват от Nullable.

Туй то :)

от beliconfused (144 точки)


1

Само една корекция. Когато в базата данни нямаш стойност просто нямаш стойност. Когато заредиш информацията от базата данни ти сам определяш празните полета как да се зареждат. Наистина единия вариант е да бъдат null.

Когато в базата данни имаш поле, което е позволено да е със стойност null в .net получаваш променлива със стойност, която е DbNull.


от wnvko (3123 точки)

0
Мерси за корекцията :) 

от beliconfused (144 точки)


0

  Вече да използваме нещата от ООП-то

Това означава, все едно типа ти е сложен в клас обвивка. Така вместо примитивен става референтен и обвивката му ползволява да приеме стойност null


от ivan.mihov1 (4988 точки)


1

Виждам, че колегите вече са обяснили, че това е Nullable тип, затова само ще вметна, че вместо int? можеш да срещнеш и Nullable<int>, вместо double? - Nullable<double> и т.н.

Двата записа означават едно и също.

Също така Nullable може да ти е променлива от тип, който ти си създал. Ето един пример от домашното ми:

BatteryTypes? batteryType = null;

public enum BatteryTypes
    {
            LiIon,
            NiMH,
            NiCd
    }




-1
И аз, както останалите братя и сестри, виждам, че колегите вече са напълнили поста с ненужни коментари, та нека не оставам по-назад. Пича вече е избрал най-добър коментар и съм сигурен, че информацията напсаина на половин ред с линк към MSDN му е била предостатъчна, за да разбере за какво иде реч. Благодарности на всички последващи хора, който толкова отчаяно се борят за някоя точица във форума, пускайки 95% излишни или неадекватни коментари само и само някои да ги ъпвоутне от съжаление. Живи и здрави и първо да се мисли после да се върши нещо по възможност!

от YoTsenkov (175 точки)


2
 А не може ли спорет теб някой да пише, за да даде свое обяснение на въпроса? За мен статиите в  MSDN често са излишно объркващи. Пък да вметна, че няма да мога да се явя на следващия изпит и направо съм умрял за точките.

от ivan.mihov1 (4988 точки)

1

За МSDN много често и аз се бъркам btw :) не знам дали нарочно го правят, но някои неща са написани доста объркващо, ако си имал "честта" да четеш документация примерно на Python, всичко е много по - приятно и хората са си го направили. А иначе YoTsenkov, не знам колко засягаш мен в коментари ти, но не виждам проблем в това да постват повече хора, въпроса по - скоро е, че изхождайки от това, че не го разбира, твърде вероятно го е написал в google и отново твърде вероятно, MSDN му е излезнал като първи резултат, колегата е кликнал ->  чел е и не го е разбрал :) 

Отваря тема във форума и първото, което му се дава е MSDN линк :) Аз лично не виждам логика, но може би пък грешката е в мен :) Разбира се изхождам от естествения процес, че когато не разбираш нещо пишеш в някоя търсачка и отваряш първите резултати и се опитваш да го "вденеш".


от beliconfused (144 точки)