Note
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãµã€ã³ã€ã³ãŸãã¯ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
ãã®ããŒãžã«ã¢ã¯ã»ã¹ããã«ã¯ãæ¿èªãå¿ èŠã§ãã ãã£ã¬ã¯ããªã®å€æŽã詊ãããšãã§ããŸãã
Null 蚱容ã®èŠåã®ç®çã¯ãã¢ããªã±ãŒã·ã§ã³å®è¡æã« System.NullReferenceException ãã¹ããŒãããå¯èœæ§ãæå°éã«æããããšã§ãã ãã®ç®æšãéæããããã«ãã³ã³ãã€ã©ã¯éçåæã䜿çšããnull åç §äŸå€ã«ã€ãªããå¯èœæ§ã®ããã³ã³ã¹ãã©ã¯ããã³ãŒãã«å«ãŸããŠããå Žåã«èŠåãçºè¡ããŸãã åã®æ³šéãšå±æ§ãé©çšããããšã§ãã³ã³ãã€ã©ã«ãã®éçåæã®ããã®æ å ±ãæäŸããŸãã ãããã®æ³šéãšå±æ§ã¯ãåã®åŒæ°ããã©ã¡ãŒã¿ãŒãã¡ã³ããŒã® NULL å€ã®èš±å®¹ã衚ããŸãã ãã®èšäºã§ã¯ãã³ã³ãã€ã©ãéçåæããçæãã null 蚱容èŠåã«å¯ŸåŠããããã®ããŸããŸãªææ³ã«ã€ããŠèª¬æããŸãã ããã§èª¬æããææ³ã¯ãäžè¬ç㪠C# ã³ãŒãçšã§ãã ãNull 蚱容åç §åã®åŠçãã«ãŠãNull 蚱容åç §åãš Entity Framework Core ãåŠçããæ¹æ³ã確èªããŠãã ããã
null 蚱容åç
§å (æŒç®å ? ã ! ãå«ã) ã¯ãnull 蚱容ã³ã³ããã¹ãã enable ãŸã㯠annotationsã«èšå®ãããŠããå Žåã«ã®ã¿èš±å¯ãããŸãã null 蚱容ã³ã³ããã¹ãã¯ããããžã§ã¯ã ãã¡ã€ã«ã® Nullablecompiler ãªãã·ã§ã³ ã䜿çšãããããœãŒã¹ ã³ãŒãã§ #nullable ãã©ã°ãã䜿çšããŠèšå®ã§ããŸãã
ãã®èšäºã§ã¯ã次ã®ã³ã³ãã€ã©èŠåã«ã€ããŠèª¬æããŸãã
- CS8597 - ã¹ããŒãããå€ã null ã§ããå¯èœæ§ããããŸãã
- CS8598 - æå¶æŒç®åã¯ããã®ã³ã³ããã¹ãã§ã¯äœ¿çšã§ããŸãã
- CS8600 - Null ãªãã©ã«ãŸã㯠Null ã®å¯èœæ§ãããå€ã Null é蚱容åã«å€æããŠããŸãã
- CS8601 - Null åç §ä»£å ¥ã®å¯èœæ§ããããŸãã
- CS8602 - null åç §ã®å¯èœæ§ããããã®ã®éåç §ã§ãã
- CS8603 - Null åç §æ»ãå€ã§ããå¯èœæ§ããããŸãã
- CS8604 - ãã©ã¡ãŒã¿ãŒã« Null åç §åŒæ°ãããå¯èœæ§ããããŸãã
- CS8605 - null ã®å¯èœæ§ãããå€ãããã¯ã¹åè§£é€ããŠããŸãã
-
CS8607 -
[NotNull]ãŸãã¯[DisallowNull]ãšããŠããŒã¯ãããåã«å¯ŸããŠãNull ã®å¯èœæ§ãããå€ã䜿çšããããšã¯ã§ããªã - CS8608 - åã«ãããåç §åã® Null 蚱容æ§ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããã
- CS8609 - æ»ãå€ã®åã«ãããåç §åã® Null 蚱容æ§ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããã
- CS8610 - åãã©ã¡ãŒã¿ãŒã«ãããåç §åã® Null 蚱容æ§ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããã
- CS8611 - åãã©ã¡ãŒã¿ãŒã«ãããåç §åã® Null 蚱容æ§ããéšåã¡ãœãã宣èšãšäžèŽããŸããã
- CS8612 - åã«ãããåç §åã® Null 蚱容æ§ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8613 - æ»ãå€ã®åã«ãããåç §åã® Null 蚱容æ§ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8614 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® Null 蚱容æ§ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8615 - åã«ãããåç §åã® Null 蚱容æ§ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8616 - æ»ãå€ã®åã«ãããåç §åã® Null 蚱容æ§ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8617 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® Null 蚱容æ§ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8618 - null é蚱容ã®å€æ°ã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®çµäºæã« null 以å€ã®å€ãå ¥ã£ãŠããªããã°ãªããŸãããNull 蚱容ãšããŠå®£èšããããšããæ€èšãã ããã
- CS8619 - å€ã«ãããåç §åã® Null 蚱容æ§ãã察象ã®åãšäžèŽããŸããã
- CS8620 - åç §åã® NULL å€ã®èš±å®¹ã®éãã«ããããã©ã¡ãŒã¿ãŒã«åŒæ°ã䜿çšã§ããŸããã
- CS8621 - æ»ãå€ã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ãã察象ã®ããªã²ãŒããšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8622 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ãã察象ã®ããªã²ãŒããšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
-
CS8623 -
System.Runtime.CompilerServices.NullableAttributeã®æç€ºçãªé©çšã¯èš±å¯ãããŠããŸããã - CS8624 - åç §åã® NULL å€ã®èš±å®¹ã®éãã«ãããåŒæ°ãåºåãšããŠäœ¿çšããããšã¯ã§ããŸããã
- CS8625 - null ãªãã©ã«ã null é蚱容åç §åã«å€æã§ããŸããã
- CS8628 - ãªããžã§ã¯ãã®äœæã§ null 蚱容åç §åã䜿çšã§ããŸããã
- CS8629 - Null 蚱容å€å㯠Null ã«ãªãå ŽåããããŸãã
- CS8631 - ãã®åãããžã§ããªãã¯åãŸãã¯ã¡ãœããå ã§åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšã¯ã§ããŸãããååŒæ°ã® Null 蚱容æ§ãå¶çŽåãšäžèŽããŸããã
-
CS8632 - null 蚱容åç
§åã®æ³šéã¯ã
#nullable泚éã³ã³ããã¹ãå ã®ã³ãŒãã§ã®ã¿äœ¿çšããå¿ èŠããããŸãã - CS8633 - ã¡ãœããã®åãã©ã¡ãŒã¿ãŒã«å¯Ÿããå¶çŽã® Null 蚱容æ§ããã€ã³ã¿ãŒãã§ã€ã¹ ã¡ãœããã®åãã©ã¡ãŒã¿ãŒã«å¯Ÿããå¶çŽãšäžèŽããŸãããæç€ºçãªã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã䜿çšããããšããå§ãããŸãã
- CS8634 - ãã®åãããžã§ããªãã¯åãŸãã¯ã¡ãœããå ã§åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšã¯ã§ããŸãããååŒæ°ã® Null 蚱容æ§ã 'class' å¶çŽãšäžèŽããŸããã
-
CS8636 -
/nullableã®ãªãã·ã§ã³ãç¡å¹ã§ããã¯ãdisableãenableãwarningsããŸãã¯annotationsã§ããå¿ èŠããããŸã -
CS8637 - äºæããã
enableãdisableããŸãã¯restore - CS8639 - null 蚱容åç §åã§ã¯ typeof æŒç®åã䜿çšã§ããŸãã
- CS8643 - æç€ºçãªã€ã³ã¿ãŒãã§ã€ã¹æå®åå ã®åç §åã® Null 蚱容æ§ããåã«ãã£ãŠå®è£ ãããŠããã€ã³ã¿ãŒãã§ã€ã¹ãšäžèŽããŸããã
- CS8644 - åã¯ã€ã³ã¿ãŒãã§ã€ã¹ ã¡ã³ããŒãå®è£ ããŸãããåºæ¬åã§å®è£ ãããŠããã€ã³ã¿ãŒãã§ã€ã¹å ã®åç §åã® Null 蚱容æ§ãäžèŽããŸããã
- CS8645 - ã¡ã³ããŒã¯æ¢ã«åã®ã€ã³ã¿ãŒãã§ã€ã¹ ãªã¹ãã«ååšããŸãããåç §åã® Null 蚱容æ§ãç°ãªã£ãŠããŸãã
- CS8650 - is-type åŒã§ null 蚱容åç §å 'type?' ã䜿çšããããšã¯æå¹ã§ã¯ãããŸããã代ããã«ãåºã«ãªãå 'type' ã䜿çšããŠãã ããã
- CS8651 - NULL å€ãèš±å¯ãããåç §ã¿ã€ã 'type?' ãåŒãšããŠäœ¿çšããããšã¯æ£åŒã§ã¯ãããŸããã代ããã«ãåºã«ãªãå'type' ã䜿çšããŠãã ããã
- CS8655 - switch åŒãäžéšã® null å ¥åãåŠçããŸãã (ãã¹ãŠãç¶²çŸ ããŠããŸãã)ã
- CS8667 - éšåã¡ãœãã宣èšã«ã¯ãåãã©ã¡ãŒã¿ãŒã®å¶çŽã« NULL å€ã®èš±å®¹ã®ççŸããããŸãã
- CS8669 - null 蚱容åç §åã®æ³šéã¯ã'#nullable' 泚éã³ã³ããã¹ãå ã®ã³ãŒãã§ã®ã¿äœ¿çšããŠãã ãããèªåçæãããã³ãŒãã§ã¯ããœãŒã¹ ã³ãŒãå ã§æç€ºç㪠'#nullable' ãã£ã¬ã¯ãã£ããå¿ èŠã§ãã
- CS8670 - ãªããžã§ã¯ããŸãã¯ã³ã¬ã¯ã·ã§ã³åæååããnull ã¡ã³ããŒã®å¯èœæ§ããããã®ãéåç §ããŠããŸãã
- CS8714 - ãã®åãããžã§ããªãã¯åãŸãã¯ã¡ãœããå ã§åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšã¯ã§ããŸãããååŒæ°ã® Null 蚱容æ§ã 'notnull' å¶çŽãšäžèŽããŸããã
- CS8762 - çµäºæã«ãã©ã¡ãŒã¿ãŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
-
CS8763 -
[DoesNotReturn]ãšããŒã¯ãããã¡ãœããã¯æ»ãããšãã§ããŸããã - CS8764 - æ»ãå€ã®åã® NULL å€ã®èš±å®¹ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8765 - ãã©ã¡ãŒã¿ãŒã®åã® NULL å€ã®èš±å®¹ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8766 - æ»ãå€ã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8767 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8768 - æ»ãå€ã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8769 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
-
CS8770 - ã¡ãœããã«ã¯ãå®è£
ãŸãã¯ãªãŒããŒã©ã€ããããã¡ã³ããŒã«äžèŽãã
[DoesNotReturn]泚éããããŸããã - CS8774 - çµäºæã«ã¡ã³ããŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8776 - ãã®å±æ§ã§ã¯ã¡ã³ããŒã䜿çšã§ããŸããã
- CS8775 - çµäºæã«ã¡ã³ããŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8777 - çµäºæã«ãã©ã¡ãŒã¿ãŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8819 - æ»ãå€ã®åã«ãããåç §åã® Null å€ã®èš±å®¹ããéšåã¡ãœãã宣èšãšäžèŽããŸããã
- CS8824 - ãã©ã¡ãŒã¿ãŒã null 以å€ã§ããããããã©ã¡ãŒã¿ãŒã«ã¯ãçµäºæã« null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8825 - ãã©ã¡ãŒã¿ãŒã null 以å€ã§ãããããæ»ãå€ã¯ null 以å€ã§ãªããã°ãªããŸããã
- CS8847 - äžéšã® null å ¥åã switch åŒã§åŠçãããŸãã (ãã¹ãŠãç¶²çŸ ãããŠã¯ããŸãã)ããã ãã'when' å¥ãå«ããã¿ãŒã³ããã®å€ãšäžèŽããå¯èœæ§ããããŸãã
泚
éçåæã§ã¯ãç¹å®ã®ã·ããªãªã§ã¡ãœãããã¢ã¯ã»ã¹ãããé åºãããã³ã¡ãœãããäŸå€ãã¹ããŒããã«æ£åžžã«å®äºãããã©ããã«ã€ããŠãåžžã«æšæž¬ã§ããããã§ã¯ãããŸããã æ¢ç¥ã®èœãšã穎ã«ã€ããŠã¯ããæ¢ç¥ã® èœãšã穎 ãã»ã¯ã·ã§ã³ã§èª¬æãããŠããŸãã
次㮠5 ã€ã®ææ³ã®ããããã䜿çšããŠãã»ãŒãã¹ãŠã®èŠåã«å¯ŸåŠããŸãã
- null 蚱容ã³ã³ããã¹ãã®èšå®ã
- å¿ èŠãª null ãã§ãã¯ã远å ããã
-
?ãŸãã¯!ã® null 蚱容泚éã远å ãŸãã¯åé€ããŸãã - null ã»ãã³ãã£ã¯ã¹ãèšè¿°ãã屿§ã远å ããã
- 倿°ãæ£ããåæåããã
null 蚱容åç §åãåããŠäœ¿çšããå Žåã null 蚱容åç §åã®æŠèŠã¯ãnull 蚱容åç §å ã解決ããå 容ãšãã³ãŒãå ã§çºçããå¯èœæ§ã®ããééãã«å¯ŸããèŠåãæäŸããããã¿ã®èæ¯ãæäŸããŸãã æ¢åã®ãããžã§ã¯ãã§ null 蚱容åç §åã æå¹ã«ããæ¹æ³ã®è©³çްã«ã€ããŠã¯ãnull 蚱容åç §åãžã®ç§»è¡ã«é¢ããã¬ã€ãã³ã¹ã確èªããããšãã§ããŸãã
null蚱容åã®ã³ã³ããã¹ããèšå®ãã
次ã®èŠåã¯ãnull 蚱容ã³ã³ããã¹ããæ£ããèšå®ããŠããªãããšã瀺ããŠããŸãã
-
CS8632 - null 蚱容åç
§åã®æ³šéã¯ã
#nullable泚éã³ã³ããã¹ãå ã®ã³ãŒãã§ã®ã¿äœ¿çšããå¿ èŠããããŸãã -
CS8636 -
/nullableã®ãªãã·ã§ã³ãç¡å¹ã§ããã¯ãdisableãenableãwarningsããŸãã¯annotationsã§ããå¿ èŠããããŸã -
CS8637 - äºæããã
enableãdisableããŸãã¯restore -
CS8668 -
warningsãannotationsããŸãã¯ãã£ã¬ã¯ãã£ãã®çµäºãå¿ èŠã§ã - CS8669 - null 蚱容åç §åã«å¯Ÿããæ³šéã¯ã'#nullable' 泚éã³ã³ããã¹ãå ã®ã³ãŒãã§ã®ã¿äœ¿çšããŠãã ãããèªåçæãããã³ãŒãã§ã¯ããœãŒã¹å ã«æç€ºç㪠'#nullable' ãã£ã¬ã¯ãã£ããå¿ èŠã§ãã
null 蚱容ã³ã³ããã¹ããæ£ããèšå®ããã«ã¯ã次㮠2 ã€ã®ãªãã·ã§ã³ããããŸãã
ãããžã§ã¯ã ã¬ãã«ã®æ§æ:
<Nullable>èŠçŽ ããããžã§ã¯ã ãã¡ã€ã«ã«è¿œå ããŸãã<PropertyGroup> <Nullable>enable</Nullable> </PropertyGroup>ãã¡ã€ã« ã¬ãã«ã®æ§æ: ãœãŒã¹ ã³ãŒãã§ããªããã»ããµ ãã£ã¬ã¯ãã£ã
#nullable䜿çšããŸãã#nullable enable
nullable ã³ã³ããã¹ãã«ã¯ãããŸããŸãªåŽé¢ãå¶åŸ¡ãã 2 ã€ã®ç¬ç«ãããã©ã°ããããŸãã
-
泚éãã©ã°:
?ã䜿çšã㊠null 蚱容åç §åã宣èšãã!ã䜿çšããŠåã ã®èŠåãæå¶ã§ãããã©ãããå¶åŸ¡ããŸãã - èŠåãã©ã°: ã³ã³ãã€ã©ã null 蚱容èŠåãåºåãããã©ãããå¶åŸ¡ããŸã
çæãããã³ãŒãã§ãnull 蚱容泚é (#nullable) ã䜿çšããåã«ãçæããããœãŒã¹ã«æç€ºç㪠ãã£ã¬ã¯ãã£ãã远å ããŸãã Projectã¬ãã«ã® null 蚱容èšå®ã¯ãçæããããœãŒã¹ ãã¡ã€ã«ã«ã¯é©çšãããªãå ŽåããããŸãã
null 蚱容ã³ã³ããã¹ããšç§»è¡æŠç¥ã®è©³çްã«ã€ããŠã¯ã次ãåç §ããŠãã ããã
äžé©åãªæ³šéæ§æ
ãããã®ãšã©ãŒãšèŠåã¯ã ! ãŸã㯠? 泚éã®äœ¿çšãæ£ãããããŠããªãããšã瀺ããŠããŸãã
- CS8598 - æå¶æŒç®åã¯ããã®ã³ã³ããã¹ãã§ã¯äœ¿çšã§ããŸãã
-
CS8623 -
System.Runtime.CompilerServices.NullableAttributeã®æç€ºçãªé©çšã¯èš±å¯ãããŠããŸããã - CS8628 - ãªããžã§ã¯ãã®äœæã§ null 蚱容åç §åã䜿çšã§ããŸããã
- CS8639 - null 蚱容åç §åã§ã¯ typeof æŒç®åã䜿çšã§ããŸãã
- CS8650 - is-type åŒã§ null 蚱容åç §å 'type?' ã䜿çšããããšã¯æå¹ã§ã¯ãããŸããã代ããã«ãåºã«ãªãå 'type' ã䜿çšããŠãã ããã
- CS8651 - NULL å€ãèš±å¯ãããåç §ã¿ã€ã 'type?' ãåŒãšããŠäœ¿çšããããšã¯æ£åŒã§ã¯ãããŸããã代ããã«ãåºã«ãªãå'type' ã䜿çšããŠãã ããã
宣èšå
ã® ? 泚éã¯ã倿°ã null ã§ããå¯èœæ§ãããããšã瀺ããŸãã å¥ã®ã©ã³ã¿ã€ã ã®çš®é¡ã瀺ãããã§ã¯ãããŸããã æ¬¡ã®å®£èšã¯ã©ã¡ããåãã©ã³ã¿ã€ã åã§ãã
string s1 = "a string";
string? s2 = "another string";
?ã¯ãnull å€ã«å¯ŸããæåŸ
ã«é¢ããã³ã³ãã€ã©ãžã®ãã³ãã§ãã
åŒã® ! 泚éã¯ãåŒãå®å
šã§ããããšãããã£ãŠãããnull ã§ãªããšèŠãªãããããšã瀺ããŸãã
- ã³ãŒãå ã® System.Runtime.CompilerServices.NullableAttribute ã§ã¯ãªãããããã®æ³šéã䜿çšããå¿ èŠããããŸãã
-
?ã¯åã§ã¯ãªã泚éã§ãããããtypeofãnewãisããŸãã¯asåŒã§ã¯äœ¿çšã§ããŸãããisåŒãšasåŒã§ã¯ãåºã«ãªã£ãŠãã NULL å€ãèš±å¯ãããªãåç §ã¿ã€ãã䜿çšããŠãã ãããNULL å€ãèš±å¯ãããæ³šéã«ã¯ã©ã³ã¿ã€ã è¡šçŸ (CS8650, CS8651) ããªãããã§ãã -
!æŒç®åã¯ã倿°åŒãŸãã¯ã¡ãœãã ã°ã«ãŒãã«é©çšã§ããŸããã -
!æŒç®åã¯ãobj.Field!.Method()ãªã©ã®ã¡ã³ã㌠ã¢ã¯ã»ã¹æŒç®åã®å·ŠåŽã«ã¯é©çšã§ããŸããã
null ã®éåç §ã®å¯èœæ§
ãã®äžé£ã®èŠåã«ãã£ãŠãnull-state ã maybe-null ã®å€æ°ãéåç §ããŠãããšèŠåãããŸãã ãããã®èŠåã¯æ¬¡ã®ãšããã§ãã
- CS8602 - null åç §ã®å¯èœæ§ããããã®ã®éåç §ã§ãã
- CS8670 - ãªããžã§ã¯ããŸãã¯ã³ã¬ã¯ã·ã§ã³åæååããnull ã¡ã³ããŒã®å¯èœæ§ããããã®ãéåç §ããŠããŸãã
次ã®ã³ãŒãã¯ãäžèšã®åèŠåã® 1 ã€ã®äŸã瀺ããŠããŸãã
class Container
{
public List<string>? States { get; set; }
}
internal void PossibleDereferenceNullExamples(string? message)
{
Console.WriteLine(message.Length); // CS8602
var c = new Container { States = { "Red", "Yellow", "Green" } }; // CS8670
}
åã®äŸã§èŠåãåºãã®ã¯ãContainerãc ã States ããããã£ã« null å€ãæã€å¯èœæ§ãããããã§ãã null ã§ããå¯èœæ§ãããã³ã¬ã¯ã·ã§ã³ã«æ°ããç¶æ
ãå²ãåœãŠããšãèŠåãçºçããŸãã
ãããã®èŠåãåé€ããã«ã¯ã倿°ãéåç §ããåã«ãã®å€æ°ã® null-state ã not-null ã«å€æŽããããã«ã³ãŒãã远å ããå¿ èŠããããŸãã ã³ã¬ã¯ã·ã§ã³åæååã®èŠåã¯ãèŠã€ãã«ããå ŽåããããŸãã åæååã§èŠçŽ ã远å ãããšãã«ãã³ã¬ã¯ã·ã§ã³ã maybe-null ã§ããããšãã³ã³ãã€ã©ã«ãã£ãŠæ€åºãããŸãã
å€ãã®å Žåã倿°ãéåç
§ããåã«å€æ°ã null ã§ãªãããšç¢ºèªããããšã§ããããã®èŠåãä¿®æ£ã§ããŸãã
message ãã©ã¡ãŒã¿ãŒãéåç
§ããåã« null ãã§ãã¯ã远å ããæ¬¡ã®äŸãèããŠã¿ãŸãããã
void WriteMessageLength(string? message)
{
if (message is not null)
{
Console.WriteLine(message.Length);
}
}
次ã®äŸã§ã¯ãStates ã®ãããã³ã° ã¹ãã¬ãŒãžãåæåããset ã¢ã¯ã»ãµãŒãåé€ããŸãã ã¯ã©ã¹ã®ã³ã³ã·ã¥ãŒããŒã¯ã³ã¬ã¯ã·ã§ã³ã®å
容ã倿Žã§ããã³ã¬ã¯ã·ã§ã³ã®ã¹ãã¬ãŒãžã¯æ±ºã㊠null ã«ã¯ãªããŸããã
class Container
{
public List<string> States { get; } = new();
}
ãããã®èŠåã衚瀺ãããä»ã®ã€ã³ã¹ã¿ã³ã¹ã¯ãæ¬éœæ§ã§ããå¯èœæ§ããããŸãã null ããã¹ããããã©ã€ããŒã ãŠãŒãã£ãªã㣠ã¡ãœãããããå ŽåããããŸãã ãã®ã¡ãœããã«ãã£ãŠ null ãã§ãã¯ãæäŸãããããšã¯ãã³ã³ãã€ã©ã§ã¯å€æã§ããŸããã ãã©ã€ããŒã ãŠãŒãã£ãªã㣠ã¡ãœãã IsNotNull ã䜿çšããæ¬¡ã®äŸãèããŠã¿ãŸãããã
public void WriteMessage(string? message)
{
if (IsNotNull(message))
Console.WriteLine(message.Length);
}
éçåæã«ãã£ãŠmessage.Lengthãmessageå¯èœæ§ããããšå€æãããããããããã㣠nullãèšè¿°ãããšãã« null ãéåç
§ããŠããå¯èœæ§ãããããšãã³ã³ãã€ã©ããèŠåããŸãã
IsNotNull㯠null ãã§ãã¯ãæäŸããtrue ãè¿ããšãã ã® message㯠null ã§ãªãããšãç¥ã£ãŠããŸãã ã³ã³ãã€ã©ã«ãããã®äºå®ãäŒããå¿
èŠããããŸãã 1 ã€ã¯ãnull å
逿Œç®å ! ã䜿çšããæ¹æ³ã§ãã æ¬¡ã®ã³ãŒããšäžèŽããããã«ãWriteLine ã¹ããŒãã¡ã³ãã倿Žã§ããŸãã
Console.WriteLine(message!.Length);
null å
逿Œç®åã䜿çšãããšããã®åŒã ãé©çšãããŠããªãå Žå㯠maybe-null ã§ãã£ããšããŠãã! ã«ãªããŸãã ãã®äŸã§ã¯ãIsNotNull ã®ã·ã°ããã£ã«å±æ§ã远å ãã解決çã®ã»ããé©åã§ãã
private static bool IsNotNull([NotNullWhen(true)] object? obj) => obj != null;
ã¡ãœããã§ System.Diagnostics.CodeAnalysis.NotNullWhenAttribute ãè¿ããããšãã¯ãobj ãã©ã¡ãŒã¿ãŒã«äœ¿çšãããŠããåŒæ°ã¯ not-null ã§ãããšããæ
å ±ããtrue ã«ãã£ãŠã³ã³ãã€ã©ã«äŒããããŸãã ã¡ãœããã§ false ãè¿ããããšãããã®åŒæ°ã«ã¯ãã®ã¡ãœãããåŒã³ãããåãšåã null-state ããããŸãã
ãã³ã
ã¡ãœãããããããã£ã null-state ã«åãŒã圱é¿ãèšè¿°ããããã«äœ¿çšã§ãããäžé£ã®è±å¯ãªå±æ§ãçšæãããŠããŸãã ãããã®è©³çްã«ã€ããŠã¯ãNull 蚱容éçåæå±æ§ã«é¢ããèšèªåç §ã®èšäºã§ç¢ºèªã§ããŸãã
maybe-null ã®å€æ°ã®éåç §ã«é¢ããèŠåãä¿®æ£ããããšã«ã¯ã次㮠3 ã€ã®ããããã®ææ³ãé¢äžããŸãã
- æ¬ ããŠãã null ãã§ãã¯ã远å ããã
- API ã« null åæå±æ§ã远å ããŠãã³ã³ãã€ã©ã® null-state ã®éçåæã«åœ±é¿ãäžããã ã¡ãœãããåŒã³åºããåŸã«æ»ãå€ãŸãã¯åŒæ°ã maybe-null ãŸã㯠not-null ã«ãªããšããããããã®å±æ§ã«ãã£ãŠã³ã³ãã€ã©ã«äŒããããŸãã
- null 蚱容æŒç®å
!ãåŒã«é©çšããç¶æ ã 匷å¶çã« not-null ã«ããŸãã
Null é蚱容åç §ã« null ãä»£å ¥ãããŠããå¯èœæ§
ãã®äžé£ã®èŠåã¯ãnull é蚱容ã®åã®å€æ°ããnull-state ã maybe-null ã®åŒã«ä»£å ¥ããããšããŠããããšãèŠåããŸãã ãããã®èŠåã¯æ¬¡ã®ãšããã§ãã
- CS8597 - ã¹ããŒãããå€ã null ã§ããå¯èœæ§ããããŸãã
- CS8600 - Null ãªãã©ã«ãŸã㯠Null ã®å¯èœæ§ãããå€ã Null é蚱容åã«å€æããŠããŸãã
- CS8601 - Null åç §ä»£å ¥ã®å¯èœæ§ããããŸãã
- CS8603 - Null åç §æ»ãå€ã§ããå¯èœæ§ããããŸãã
- CS8604 - ãã©ã¡ãŒã¿ãŒã« Null åç §åŒæ°ãããå¯èœæ§ããããŸãã
- CS8605 - null ã®å¯èœæ§ãããå€ãããã¯ã¹åè§£é€ããŠããŸãã
- CS8625 - null ãªãã©ã«ã null é蚱容åç §åã«å€æã§ããŸããã
- CS8629 - Null 蚱容å€å㯠Null ã«ãªãå ŽåããããŸãã
Null é蚱容ã®å€æ°ã« maybe-null ã®åŒãä»£å ¥ããããšãããšãã³ã³ãã€ã©ãããããã®èŠåãçºããããŸãã äŸãã°æ¬¡ãæããããŸãã
string? TryGetMessage(int id) => "";
string msg = TryGetMessage(42); // Possible null assignment.
ããŸããŸãªèŠåã¯ãä»£å ¥ãããã¯ã¹åè§£é€ã®å²ãåœãŠãreturn ã¹ããŒãã¡ã³ããã¡ãœããã®åŒæ°ãthrow åŒãªã©ãã³ãŒãã«é¢ãã詳现ãæäŸããããšã瀺ããŠããŸãã
ãããã®èŠåã«å¯ŸåŠããããã«ã3 ã€ã®ããããã®ã¢ã¯ã·ã§ã³ãå®è¡ã§ããŸãã 1 ã€ã¯ã? 泚éã远å ããŠå€æ°ã Null 蚱容åç
§åã«ããæ¹æ³ã§ãã ãã®å€æŽã«ãããä»ã®èŠåãçºçããå¯èœæ§ããããŸãã 倿°ã Null é蚱容åç
§ãã Null 蚱容åç
§ã«å€æŽããããšã§ããã®æ¢å®ã® null-state ã not-null ãã maybe-null ã«å€ãããŸãã ã³ã³ãã€ã©ã®éçåæã§ã¯ããããããã null ãããããªã倿°ãéåç
§ããå¯èœæ§ãããã€ã³ã¹ã¿ã³ã¹ãèŠã€ãããŸãã
ãã®ä»ã®ã¢ã¯ã·ã§ã³ã«ãã£ãŠãä»£å ¥ã®å³åŽã not-null ã§ãããšããããšãã³ã³ãã€ã©ã«äŒããããŸãã æ¬¡ã®äŸã«ç€ºãããã«ãå³åŽã®åŒã«ã¯ä»£å ¥ã®åã« null ãã§ãã¯ãè¡ãããšãã§ããŸããã
string notNullMsg = TryGetMessage(42) ?? "Unknown message id: 42";
åã®äŸã¯ãã¡ãœããã®æ»ãå€ã®ä»£å
¥ã瀺ããŸãã ã¡ãœãã (ãŸãã¯ããããã£) ã«æ³šéãä»ããŠãã¡ãœããã null 以å€ã®å€ãè¿ãã¿ã€ãã³ã°ã瀺ããŸãã å€ãã®å Žåãå
¥ååŒæ°ã System.Diagnostics.CodeAnalysis.NotNullIfNotNullAttribute ã®ãšãã«æ»ãå€ã not-null ã§ããããšã ã«ãã£ãŠç¹å®ãããŸãã ãã 1 ã€ã¯ãnull å
逿Œç®å ! ãå³åŽã«è¿œå ããæ¹æ³ã§ãã
string msg = TryGetMessage(42)!;
maybe-null åŒã not-null 倿°ã«ä»£å ¥ããããšã«é¢ããèŠåãä¿®æ£ããããšã«ã¯ã次㮠4 ã€ã®ããããã®ææ³ãé¢äžããŸãã
- ä»£å ¥ã®å·ŠåŽã Null 蚱容åã«å€æŽããã ãã®ã¢ã¯ã·ã§ã³ã§ã¯ããã®å€æ°ãéåç §ãããšãæ°ããèŠåãçºçããå¯èœæ§ããããŸãã
- ä»£å ¥ã®åã« null ãã§ãã¯ãæå®ããã
- ä»£å ¥ã®å³åŽãçæãã API ã«æ³šéãä»ããã
- null å 逿Œç®åãä»£å ¥ã®å³åŽã«è¿œå ããã
åæåãããŠããªã Null é蚱容åç §
ãã®äžé£ã®èŠåã¯ãnull é蚱容ã®åã®å€æ°ããnull-state ã maybe-null ã®åŒã«ä»£å ¥ããããšããŠããããšãèŠåããŸãã ãããã®èŠåã¯æ¬¡ã®ãšããã§ãã
- CS8618 - null é蚱容ã®å€æ°ã«ã¯ãã³ã³ã¹ãã©ã¯ã¿ãŒã®çµäºæã« null 以å€ã®å€ãå ¥ã£ãŠããªããã°ãªããŸãããNull 蚱容ãšããŠå®£èšããããšããæ€èšãã ããã
- CS8762 - çµäºæã«ãã©ã¡ãŒã¿ãŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
äŸãšããŠã次ã®ã¯ã©ã¹ã«ã€ããŠèããŠã¿ãŸãããã
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
FirstName ãš LastName ã¯ã©ã¡ããåæåãä¿èšŒãããŠããŸããã ãã®ã³ãŒããæ°ããå Žåã¯ããããªã㯠ã€ã³ã¿ãŒãã§ã€ã¹ã®å€æŽãæ€èšããŠãã ããã äžèšã®äŸã¯ã次ã®ããã«æŽæ°ã§ããŸãã
public class Person
{
public Person(string first, string last)
{
FirstName = first;
LastName = last;
}
public string FirstName { get; set; }
public string LastName { get; set; }
}
ååãèšå®ããåã« Person ãªããžã§ã¯ããäœæããå¿
èŠãããå Žåã¯ãæ¢å®ã® null 以å€ã®å€ã䜿çšããŠããããã£ãåæåã§ããŸãã
public class Person
{
public string FirstName { get; set; } = string.Empty;
public string LastName { get; set; } = string.Empty;
}
ãã 1 ã€ã®æ¹æ³ã¯ããããã®ã¡ã³ããŒã null 蚱容åç
§åã«å€æŽããããšã§ãã ååã« Person ãèš±å¯ãããå¿
èŠãããå Žåã¯ãnull ã¯ã©ã¹ã次ã®ããã«å®çŸ©ã§ããŸãã
public class Person
{
public string? FirstName { get; set; }
public string? LastName { get; set; }
}
æ¢åã®ã³ãŒãã§ã¯ããããã®ã¡ã³ããŒã® null ã»ãã³ãã£ã¯ã¹ã«ã€ããŠã³ã³ãã€ã©ã«éç¥ããããã«ãä»ã®å€æŽãå¿
èŠã«ãªãå ŽåããããŸãã è€æ°ã®ã³ã³ã¹ãã©ã¯ã¿ãŒããããã¯ã©ã¹ã«ã¯ 1 ã€ä»¥äžã®ã¡ã³ããŒãåæåãããã©ã€ããŒã ãã«ã㌠ã¡ãœããããããŸãã åæåã³ãŒãã 1 ã€ã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ç§»åãããã¹ãŠã®ã³ã³ã¹ãã©ã¯ã¿ãŒããå
±éã®åæåã³ãŒããå«ããã®ãåŒã³åºãããã«ããããšãã§ããŸãã ãŸãã¯ãSystem.Diagnostics.CodeAnalysis.MemberNotNullAttribute 屿§ãš System.Diagnostics.CodeAnalysis.MemberNotNullWhenAttribute 屿§ã䜿çšã§ããŸãã ãããã®å±æ§ã¯ãã¡ãœãããæ»ã£ãåŸã«ã¡ã³ããŒã null ã§ã¯ãªãããš ãã³ã³ãã€ã©ã«éç¥ããŸãã æ¬¡ã®ã³ãŒãã¯ãããããã®äŸã瀺ããŠããŸãã
Person ã¯ã©ã¹ã§ã¯ãä»ã®ãã¹ãŠã®ã³ã³ã¹ãã©ã¯ã¿ãŒã«ãã£ãŠåŒã³åºãããå
±éã®ã³ã³ã¹ãã©ã¯ã¿ãŒã䜿çšããŠããŸãã
Student ã¯ã©ã¹ã«ã¯ãSystem.Diagnostics.CodeAnalysis.MemberNotNullAttribute 屿§ã§æ³šéä»ãããããã«ã㌠ã¡ãœããããããŸãã
using System.Diagnostics.CodeAnalysis;
public class Person
{
public string FirstName { get; set; }
public string LastName { get; set; }
public Person(string firstName, string lastName)
{
FirstName = firstName;
LastName = lastName;
}
public Person() : this("John", "Doe") { }
}
public class Student : Person
{
public string Major { get; set; }
public Student(string firstName, string lastName, string major)
: base(firstName, lastName)
{
SetMajor(major);
}
public Student(string firstName, string lastName) :
base(firstName, lastName)
{
SetMajor();
}
public Student()
{
SetMajor();
}
[MemberNotNull(nameof(Major))]
private void SetMajor(string? major = default)
{
Major = major ?? "Undeclared";
}
}
æåŸã«ãnull å 逿Œç®åã䜿çšããŠãã¡ã³ããŒãä»ã®ã³ãŒãã§åæåãããŠããããšã瀺ãããšãã§ããŸãã å¥ã®äŸãšããŠãEntity Framework Core ã¢ãã«ãè¡šãæ¬¡ã®ã¯ã©ã¹ã«ã€ããŠèããŠã¿ãŠãã ããã
public class TodoItem
{
public long Id { get; set; }
public string? Name { get; set; }
public bool IsComplete { get; set; }
}
public class TodoContext : DbContext
{
public TodoContext(DbContextOptions<TodoContext> options)
: base(options)
{
}
public DbSet<TodoItem> TodoItems { get; set; } = null!;
}
DbSet ããããã£ã¯ null! ã«åæåãããŸãã ããããã£ã not-null å€ã«èšå®ãããããšãã³ã³ãã€ã©ã«äŒããããŸãã å®éãããŒã¹ã® DbContext ã«ãã£ãŠãã®ã»ããã®åæåãå®è¡ãããŸãã ã³ã³ãã€ã©ã®éçåæã§ã¯ããããæŸããŸããã null 蚱容åç
§åãš Entity Framework Core ã®åŠçã®è©³çްã«ã€ããŠã¯ããEF Core ã§ã® Null 蚱容åç
§åã®åŠçãã®èšäºãåç
§ããŠãã ããã
Null é蚱容ã¡ã³ããŒã®åæåã«é¢ããèŠåãä¿®æ£ããããšã«ã¯ã次㮠4 ã€ã®ããããã®ææ³ãé¢äžããŸãã
- ã³ã³ã¹ãã©ã¯ã¿ãŒãŸãã¯ãã£ãŒã«ãåæååã倿Žãããã¹ãŠã® Null é蚱容ã¡ã³ããŒãåæåãããããã«ããã
- 1 ã€ä»¥äžã®ã¡ã³ããŒã Null 蚱容åã«å€æŽããã
- ãã«ã㌠ã¡ãœããã«æ³šéãä»ããã©ã®ã¡ã³ããŒãä»£å ¥ãããŠãããã瀺ãã
-
null!ã«åæååã远å ããŠããã®ã¡ã³ããŒãä»ã®ã³ãŒãã§åæåãããŠããããšã瀺ãã
NULL å€ã®èš±å®¹ã®å®£èšã®äžäžèŽ
å€ãã®èŠåã§ã¯ãã¡ãœãããããªã²ãŒããåãã©ã¡ãŒã¿ãŒã®ã·ã°ããã£éã® NULL å€ã®èš±å®¹äžäžèŽã瀺ããŸãã
- CS8608 - åã«ãããåç §åã® Null 蚱容æ§ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããã
- CS8609 - æ»ãå€ã®åã«ãããåç §åã® Null 蚱容æ§ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããã
- CS8610 - åãã©ã¡ãŒã¿ãŒã«ãããåç §åã® Null 蚱容æ§ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããã
- CS8611 - åãã©ã¡ãŒã¿ãŒã«ãããåç §åã® Null 蚱容æ§ããéšåã¡ãœãã宣èšãšäžèŽããŸããã
- CS8612 - åã«ãããåç §åã® Null 蚱容æ§ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8613 - æ»ãå€ã®åã«ãããåç §åã® Null 蚱容æ§ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8614 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® Null 蚱容æ§ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8615 - åã«ãããåç §åã® Null 蚱容æ§ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8616 - æ»ãå€ã®åã«ãããåç §åã® Null 蚱容æ§ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8617 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® Null 蚱容æ§ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããã
- CS8619 - å€ã«ãããåç §åã® Null 蚱容æ§ãã察象ã®åãšäžèŽããŸããã
- CS8620 - åç §åã® NULL å€ã®èš±å®¹ã®éãã«ããããã©ã¡ãŒã¿ãŒã«åŒæ°ã䜿çšã§ããŸããã
- CS8621 - æ»ãå€ã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ãã察象ã®ããªã²ãŒããšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8622 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ãã察象ã®ããªã²ãŒããšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8624 - åç §åã® NULL å€ã®èš±å®¹ã®éãã«ãããåŒæ°ãåºåãšããŠäœ¿çšããããšã¯ã§ããŸããã
- CS8631 - ãã®åãããžã§ããªãã¯åãŸãã¯ã¡ãœããå ã§åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšã¯ã§ããŸãããååŒæ°ã® Null 蚱容æ§ãå¶çŽåãšäžèŽããŸããã
- CS8633 - ã¡ãœããã®åãã©ã¡ãŒã¿ãŒã«å¯Ÿããå¶çŽã® Null 蚱容æ§ããã€ã³ã¿ãŒãã§ã€ã¹ ã¡ãœããã®åãã©ã¡ãŒã¿ãŒã«å¯Ÿããå¶çŽãšäžèŽããŸãããæç€ºçãªã€ã³ã¿ãŒãã§ã€ã¹ã®å®è£ ã䜿çšããããšããå§ãããŸãã
- CS8634 - ãã®åãããžã§ããªãã¯åãŸãã¯ã¡ãœããå ã§åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšã¯ã§ããŸãããååŒæ°ã® Null 蚱容æ§ã 'class' å¶çŽãšäžèŽããŸããã
- CS8643 - æç€ºçãªã€ã³ã¿ãŒãã§ã€ã¹æå®åå ã®åç §åã® Null 蚱容æ§ããåã«ãã£ãŠå®è£ ãããŠããã€ã³ã¿ãŒãã§ã€ã¹ãšäžèŽããŸããã
- CS8644 - åã¯ã€ã³ã¿ãŒãã§ã€ã¹ ã¡ã³ããŒãå®è£ ããŸãããåºæ¬åã§å®è£ ãããŠããã€ã³ã¿ãŒãã§ã€ã¹å ã®åç §åã® Null 蚱容æ§ãäžèŽããŸããã
- CS8645 - ã¡ã³ããŒã¯æ¢ã«åã®ã€ã³ã¿ãŒãã§ã€ã¹ ãªã¹ãã«ååšããŸãããåç §åã® Null 蚱容æ§ãç°ãªã£ãŠããŸãã
- CS8667 - éšåã¡ãœãã宣èšã«ã¯ãåãã©ã¡ãŒã¿ãŒã®å¶çŽã« NULL å€ã®èš±å®¹ã®ççŸããããŸãã
- CS8714 - ãã®åãããžã§ããªãã¯åãŸãã¯ã¡ãœããå ã§åãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããããšã¯ã§ããŸãããååŒæ°ã® Null 蚱容æ§ã 'notnull' å¶çŽãšäžèŽããŸããã
- CS8764 - æ»ãå€ã®åã® NULL å€ã®èš±å®¹ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8765 - ãã©ã¡ãŒã¿ãŒã®åã® NULL å€ã®èš±å®¹ãããªãŒããŒã©ã€ããããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8766 - æ»ãå€ã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8767 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããæé»çã«å®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8768 - æ»ãå€ã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8769 - ãã©ã¡ãŒã¿ãŒã®åã«ãããåç §åã® NULL å€ã®èš±å®¹ããå®è£ ãããã¡ã³ããŒãšäžèŽããŸããããããããNULL å€ã®èš±å®¹ã®å±æ§ãåå ã§ãã
- CS8819 - æ»ãå€ã®åã«ãããåç §åã® Null å€ã®èš±å®¹ããéšåã¡ãœãã宣èšãšäžèŽããŸããã
次ã®ã³ãŒã㯠CS8764 ã瀺ããŠããŸãã
public class B
{
public virtual string GetMessage(string id) => string.Empty;
}
public class D : B
{
public override string? GetMessage(string? id) => default;
}
åã®äŸã¯ãããŒã¹ ã¯ã©ã¹å
ã® virtual ã¡ãœãããšãNULL å€ã®èš±å®¹ãç°ãªã override ã瀺ããŸãã åºæ¬ã¯ã©ã¹ã§ã¯ Null é蚱容æååãè¿ããŸãããæŽŸçã¯ã©ã¹ã§ã¯ Null 蚱容æååãè¿ããŸãã
string ãš string? ãéã®å Žåã¯ã掟çã¯ã©ã¹ã®ã»ããããå¶çŽããããããèš±å¯ãããŸãã åæ§ã«ããã©ã¡ãŒã¿ãŒã®å®£èšãäžèŽããå¿
èŠããããŸãã ãªãŒããŒã©ã€ã ã¡ãœããã®ãã©ã¡ãŒã¿ãŒã§ã¯ãåºæ¬ã¯ã©ã¹ã§èš±å¯ãããªãå Žåã§ã null ãèš±å¯ãããŸãã
ä»ã®ç¶æ³ã§ã¯ããããã®èŠåãçæãããå¯èœæ§ããããŸãã ã€ã³ã¿ãŒãã§ã€ã¹ ã¡ãœããã®å®£èšãšãã®ã¡ãœããã®å®è£ ãäžèŽããŠããŸããã ããªã²ãŒãåãšãã®ããªã²ãŒãã®åŒãç°ãªãå ŽåããããŸãã åãã©ã¡ãŒã¿ãŒãšååŒæ°ã¯ null å€ã®èš±å®¹ãç°ãªããŸãã
ãããã®èŠåãä¿®æ£ããã«ã¯ãé©åãªå®£èšãæŽæ°ããŸãã
ã³ãŒãã屿§å®£èšãšäžèŽããªã
åã®ã»ã¯ã·ã§ã³ã§ã¯ã Null 蚱容ã®éçåæã«å±æ§ ã䜿çšããŠãã³ãŒãã® null ã»ãã³ãã£ã¯ã¹ã«ã€ããŠã³ã³ãã€ã©ã«éç¥ããæ¹æ³ã«ã€ããŠèª¬æããŸããã ã³ãŒãããã®å±æ§ã®çŽæäºã«åŸããªãå Žåãã³ã³ãã€ã©ããèŠåãçºçããŸãã
-
CS8607 -
[NotNull]ãŸãã¯[DisallowNull]ãšããŠããŒã¯ãããåã«å¯ŸããŠãNull ã®å¯èœæ§ãããå€ã䜿çšããããšã¯ã§ããªã -
CS8763 -
[DoesNotReturn]ãšããŒã¯ãããã¡ãœããã¯æ»ãããšãã§ããŸããã -
CS8770 -
[DoesNotReturn]ã¡ãœããã«ã¯ãå®è£ ãŸãã¯ãªãŒããŒã©ã€ããããã¡ã³ããŒã«äžèŽãã æ³šéããããŸããã - CS8774 - çµäºæã«ã¡ã³ããŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8775 - çµäºæã«ã¡ã³ããŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8776 - ãã®å±æ§ã§ã¯ã¡ã³ããŒã䜿çšã§ããŸããã
- CS8777 - çµäºæã«ãã©ã¡ãŒã¿ãŒã«ã¯ null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8824 - ãã©ã¡ãŒã¿ãŒã null 以å€ã§ããããããã©ã¡ãŒã¿ãŒã«ã¯ãçµäºæã« null 以å€ã®å€ãå«ãŸããŠããå¿ èŠããããŸãã
- CS8825 - ãã©ã¡ãŒã¿ãŒã null 以å€ã§ãããããæ»ãå€ã¯ null 以å€ã§ãªããã°ãªããŸããã
次ã®ã¡ãœããããããšããŸãã
public bool TryGetMessage(int id, [NotNullWhen(true)] out string? message)
{
message = null;
return true;
}
message ãã©ã¡ãŒã¿ãŒã« null ã代å
¥ããã"ãã€" ã¡ãœããã§ true ãè¿ããããããã³ã³ãã€ã©ã§èŠåãçºçããŸãã
NotNullWhen 屿§ã«ãã£ãŠãããã¯çºçããªãã¯ãã§ãããšææãããŸãã
ãããã®èŠåã«å¯ŸåŠããã«ã¯ãã³ãŒããæŽæ°ããŠãé©çšããã屿§ã®æåŸ å€ãšäžèŽããããã«ããŸãã 屿§ãŸãã¯ã¢ã«ãŽãªãºã ã倿Žã§ããŸãã
ç¶²çŸ ç㪠switch åŒ
switch åŒã¯ "ç¶²çŸ
ç" ã§ããå¿
èŠããããŸããã€ãŸãããã¹ãŠã®å
¥åå€ãåŠçãããå¿
èŠããããŸãã null é蚱容ã®åç
§åã®å Žåã§ããnull å€ãèæ
®ãããå¿
èŠããããŸãã null å€ãåŠçãããªãå Žåãã³ã³ãã€ã©ã®èŠåãçºè¡ãããŸãã
- CS8655 - switch åŒãäžéšã® null å ¥åãåŠçããŸãã (ãã¹ãŠãç¶²çŸ ããŠããŸãã)ã
- CS8847 - äžéšã® null å ¥åã switch åŒã§åŠçãããŸãã (ãã¹ãŠãç¶²çŸ ãããŠã¯ããŸãã)ããã ãã'when' å¥ãå«ããã¿ãŒã³ããã®å€ãšäžèŽããå¯èœæ§ããããŸãã
次ã®ãµã³ãã« ã³ãŒãã¯ããã®æ¡ä»¶ã瀺ããŠããŸãã
int AsScale(string status) =>
status switch
{
"Red" => 0,
"Yellow" => 5,
"Green" => 10,
{ } => -1
};
å
¥ååŒã¯ string ã§ãããstring? ã§ã¯ãããŸããã ãã¯ãã³ã³ãã€ã©ã§ãã®èŠåãçæãããŸãã
{ } ãã¿ãŒã³ã¯ null 以å€ã®ãã¹ãŠã®å€ãåŠçããŸãããnull ã«äžèŽããŸããã ãããã®ãšã©ãŒã«å¯ŸåŠããã«ã¯ãæç€ºç㪠null ã±ãŒã¹ã远å ãããã{ } ã _ (ç Žæ£) ãã¿ãŒã³ã«çœ®ãæããŸãã ç Žæ£ãã¿ãŒã³ã¯ãä»ã®å€ã«å ã㊠null ãšäžèŽããŸãã