èšäºã®
æåã®éšåã§ã¯ãTIOBEã®è©äŸ¡ã®èŠ³ç¹ããCïŒã«å¯ŸããVB.NETã®åªäœæ§ã®ãããã¯ã§ãã³ã¡ã³ãã«æŽ»çºãªåå¿ãèŠã€ãããŸããã ãããã£ãŠã
AngReloadã®
ã¢ããã€ã¹ ã«åŸã£ãŠã StackOverflowã®
åŸåãèŠãŠã¿ãŸãããã

CïŒã¯ãŸã 匷ãïŒ é·ãé話ãããŠããé©åœã¯ãã£ã³ã»ã«ãããŸããïŒ ã»ãã仲éïŒ ãã©ããïŒ TIOBEè©äŸ¡ã¯æ€çŽ¢ãšã³ãžã³ã¯ãšãªã«åºã¥ããŠãããSOè©äŸ¡ã¯è³ªåããã質åã®ã¿ã°ã«åºã¥ããŠããŸãã ãããããVB.NETã®éçºè
ã¯ãå°éæ§ã®ãªãå€ãã®äººã
ãå«ããŠãåã«StackOverflowã®ååšãç¥ããªãã®ã§ããããïŒ ãŸãã¯ãGoogleããŸãã¯Bingãä»ããŠããã«ãã©ãçããã®ã«ã質åã®ä»æ¹ãåãããªãã®ã§ãã ãŸãã¯ãååãªMiscrosoftã®ããã¥ã¡ã³ãããããããã€ãã®è³ªåã¯ãã¹ãŠåçæžã¿ã§ãã
ãããã«ããŠããVB.NETã®ã·ã§ã¢ã¯ç®ç«ã£ãŠå®å®ããŠããŸãããããªã¥ãŒã ã«é¢ããŠã¯ç¬¬äžäœã§ã¯ãããŸããã ãããŠããã¡ããããã®ãããªçµæã¯ãã¶ã€ããŒãšèšèªéçºè
ã®åŒ·åãªããŒã ãªãã§ã¯äžå¯èœã§ããã 以äžã¯ããã®ããŒã ã®ã¡ã³ããŒ
Anthony Greenã«ããèšäºã®ç¿»èš³ã®2çªç®ã®éšåã§ãã
å
容
é衚瀺ã®ããã¹ãã³ã³ããŒãžã§ã³æ°
è¡šçŸ
ã³ã³ããŒãžã§ã³æ°
34.ããŒã«å€æ
Boolean True
ã笊å·ä»ãæ°å€åã«å€æãããš
-1
çæããã笊å·ãªãåã«å€æãããšãã®åã®æ倧å€ãåŸãããŸãããCïŒã§ã¯ãã®ãããªå€æã¯ãããŸããã ãã ãã
Convert.ToInt32
ã¡ãœããã¯ãããšãã°
True
ã
1
ã«å€æããããã
IL
æãé »ç¹ã«è¡šçŸãããŸãã éæ¹åã§ã¯ã
0
以å€ã®
0
ã¯
True
å€æãã
True
ã
ãªãã§ïŒ VBã
-1
ãã
1
ã䜿çšããããšã奜ãçç±ã¯ããã¹ãŠã®èšèªã§ãããåäœã®0ïŒãã¹ãŠã®ãããã0ã«èšå®ãããïŒã®åŠå®ã
-1
ïŒãã¹ãŠã®ãããã
1
èšå®ãããïŒã§ããããããã®å€ã䜿çšãããšè«ççããã³ãããåäœãçµã¿åããããããã§ã
And
ã
Or
Xor
ãªã©ã®æäœã
ãTrueãããã³ãFalseãè¡ãšã®éã®å€æããµããŒããããŠããŸãïŒãã¡ããã倧æåãšå°æåã¯åºå¥ãããŸããïŒã
35. Option StrictãOnã«èšå®ãããŠããå Žåã§ããEnumã¿ã€ãéããã³Enumã¿ã€ããšãã®ããŒã¹ã¿ã€ãéã®å€æã¯å®å
šã«ç¡å¶éã§ãã
å²åŠçãªèŠ³ç¹ãããèšèªã¯åºæ¬çãªæŽæ°åã®ååä»ãå®æ°ã®ã»ãããšããŠã§ã¯ãªãã
Enum
åãåç
§ããŸãã ãããæãæçœãªå Žæã¯å¹³çã§ãã æŽæ°ãåæå€ãšæ¯èŒããããšã¯åžžã«èš±å¯ãããŸãããCïŒã§ã¯ããã¯ãšã©ãŒã«ãªããŸãã
ã¹ããŒãªãŒã¿ã€ã ïŒ Roslyn APIã¯å€ãã®å
éšæ¹èšãçµãŠããŸãã ãããããããã®ããããã§ãåèšèªã«
SyntaxKind
åæãå²ãåœãŠãããããŒããã©ã®æ§æãè¡šããã
IfStatement
ãŸãïŒäŸãã°ã
IfStatement
ã
TryCastExpression
ïŒã éçºè
ã¯èšèªããæœè±¡åããããšããAPIã䜿çšãã
SyntaxKind
å€ã®1ã€ã
Integer
ãšããŠã®ã¿
SyntaxKind
ãçã®
Integer
ãš
SyntaxKind
æ¯èŒãããšãã«ãšã©ãŒãåãåããããã®éçºè
ã¯ããã«ç§ã®ãªãã£ã¹ã«æ¥ãŠãäžæºãèšããŸããïŒ
å®è£
ã®è©³çŽ°ã«ã€ããŠã¯ããã£ã¹ãã匷å¶ããå¿
èŠããããŸããïŒãæ°å¹ŽåŸãAPIã®æ¬¡ã®æ¹èšæã«ãèšèªåºæã®åãæãããããã£ïŒ
Property Kind As SyntaxKind
ïŒãå®å
šã«åé€ãããã¹ãŠã®APIã
Integer
ãè¿ãå§ããŸããã ãã¹ãŠã®CïŒã³ãŒããç Žæãããã¹ãŠã®VBã³ãŒãã¯äœãèµ·ãããªãã£ããã®ããã«æ©èœãç¶ããŸããã
å°ãåŸã«ããã®ããããã£ã®ååã
RawKind
ã«å€æŽããèšèªåºæã®æ¡åŒµã¡ãœãã
Kind()
ãè¿œå ããããšã«ããŸããã ã¡ãœãããåŒã³åºãããã«æ¬åŒ§ãå¿
èŠã ã£ãããããã¹ãŠã®CïŒã³ãŒããå£ããŸããããVBã§ã¯å¿
èŠãªãã£ãããããã¹ãŠã®VBã³ãŒãã¯ãäœãèµ·ãããªãã£ããã®ããã«åã³æ©èœãç¶ããŸããã
36.æŽæ°æŒç®ã®ãªãŒããŒãããŒ/è² ã®ãªãŒããŒãããŒã®ãã§ãã¯ã¯ãã³ã³ãã€ã«ç°å¢ïŒãããžã§ã¯ãèšå®ïŒã«ãã£ãŠå®å
šã«å¶åŸ¡ãããŸãããVBãšCïŒã¯ç°ãªãããã©ã«ãå€ã䜿çšããŸãã VBã§ã¯ããªãŒããŒãããŒãã§ãã¯ã¯ããã©ã«ãã§æå¹ã«ãªã£ãŠããŸã
æŽæ°åã«ã¯ç¯å²ããããããããšãã°ã
Byte
ã¯0ã255ã®å€ãè¡šãããšãã§ããŸãã
Byte
1ã
Byte
255ã«è¿œå ãããšã©ããªããŸããã ãªãŒããŒãããŒ/ã¢ã³ããŒãããŒãç¡å¹ãªå Žåãå€ã¯0ã«ã¹ã¯ããŒã«ããŸããåã笊å·ä»ãã®å Žåãè² ã®æå°æ°ïŒããšãã°ã
SByte
-128ïŒã«ã¹ã¯ããŒã«ããŸãã ããã¯ãããããããã°ã©ã ã®ãšã©ãŒã瀺ããŠããŸãã ãªãŒããŒãããŒ/ã¢ã³ããŒãããŒã®ãã§ãã¯ãæå¹ã«ãªã£ãŠããå ŽåãäŸå€ãã¹ããŒãããŸãã æå³ãç解ããããã«ããã®ç¡å®³ãª
For
ã«ãŒããèŠãŠãã ããã
Module Program Sub Main() For i As Byte = 0 To 255 Console.WriteLine(i) Next End Sub End Module
githubãœãŒã¹ã³ãŒãããã©ã«ãã§ã¯ããã®ã«ãŒãã¯VBã§äŸå€ãã¹ããŒããŸãïŒã«ãŒãã®æåŸã®å埩ã
Byte
å¢çãè¶
ããããã§ãããã ãããªãŒããŒãããŒãã§ãã¯ããªãã«ãããšã255 iãåã³0ã«ãªãããã«ãŒãããŸãã
ã¢ã³ããŒãããŒã¯ããã®ã¿ã€ãã®æå°å€ãäžåããšæ倧å€ã«ãªããšããå察ã®ç¶æ³ã§ãã
ããäžè¬çãªãªãŒããŒãããŒã®ç¶æ³ã¯ãåçŽã«2ã€ã®æ°åãå ç®ããããšã§ãã äž¡æ¹ãšã
Byte
ãšããŠ130ãš150ã®çªå·ã
Byte
ãŸãã ããããåèšãããšãçãã¯280ã«ãªããByteã«åãŸããŸããã ããããããã»ããµã¯ãããèªèããŸããã 代ããã«ã圌ã¯çãã24ã ãšå ±åããŠããŸãã
ãšããã§ãããã¯å€æãšã¯é¢ä¿ãããŸããã 2ãã€ããè¿œå ãããš1ãã€ãã«ãªããŸãã ããã¯ããã€ããªæ°åŠã®æ©èœã§ãã ãã ããLongããIntegerãžã®å€æãè©Šã¿ãå Žåãªã©ãå€æãå®è¡ããããšã§ãªãŒããŒãããŒãçºçããããšããããŸãã ãªãŒããŒãããŒããã§ãã¯ããã«ãããã°ã©ã ã¯ãã®å€æ°ã«åãŸãç¯å²ã§äœåãªããããã¹ã¿ãããã«ããããŸãã
éãã¯äœã§ããïŒ ããã©ãŒãã³ã¹ã CLRã®ãªãŒããŒãããŒããã§ãã¯ããã«ã¯ãä»ã®ãã¹ãŠã®ã»ãã¥ãªãã£ãã§ãã¯ãšåæ§ã«ãéãã§ãã¯ãªãã·ã§ã³ã«æ¯ã¹ãŠèšç®æéãå°ãé·ããªããŸãã VBã¯ãéçºè
ã®çç£æ§ãèšç®ããã©ãŒãã³ã¹ãããéèŠã§ãããšããå²åŠã«åºã¥ããŠãããããããã©ã«ãã§ã¯ã»ãã¥ãªãã£ãã§ãã¯ãæå¹ã«ãªã£ãŠããŸãã
ä»æ¥ã®CïŒéçºããŒã ã¯ãããžã§ã¯ãã®ããã©ã«ãèšå®ã«ã€ããŠç°ãªã決å®ãäžã
ãããããŸããããæåã®CïŒéçºè
ã¯C / C ++éçºè
ããæ¥ãããšãèãããšããã®ã°ã«ãŒãã®äººã
ã¯ããããã³ãŒãããã以äžäœãããªãããšãèŠæ±ããããã»ããµãµã€ã¯ã«ãç ç²ã«ããå¯èœæ§ããããŸã;
ããã¯é£ããå²åŠçãªéãã§ãã
ãã¥ã¢ã³ã¹ïŒãªãŒããŒãããŒ/ã¢ã³ããŒãããŒãã§ãã¯ããªãã«ãªã£ãŠããå Žåã§ãã
Single
ãŸãã¯
Double
ã®
PositiveInfinity
ã
NegativeInfinity
ã
NaN
ãã
Decimal
ãžã®å€æã¯äŸå€
Decimal
ã¹ããŒããŸãããããã®å€ã¯ååãšããŠDecimalã§è¡šçŸã§ããªãããã§ãã
37.æµ®åå°æ°ç¹æ°ãæŽæ°åã«å€æããã«ã¯ãåãæšãŠãã®ã§ã¯ãªãããã³ã«ãŒã®äžžãã䜿çšããŸã
VBã§1.7ãæŽæ°ã«å€æãããšãçµæã¯2ã«ãªããŸããCïŒã§ã¯ãçµæã¯1ã«ãªããŸããã¢ã¡ãªã«ä»¥å€ã®æ°åŠçèŠåã«ã€ããŠã¯äœãèšããŸããããå®æ°ããæŽæ°ã«åãæ¿ãããšãæ¬èœçã«äžžããããŸãã ãããŠãããã°ã©ããŒã®ãµãŒã¯ã«ã®å€ã§ç§ãç¥ã£ãŠãã人ã¯èª°ãã1.7ã«æãè¿ãæŽæ°ã1ã§ãããšã¯èããŠããŸããã
å®éã«ã¯ãããã€ãã®äžžãæ¹æ³ããããVBïŒããã³Math.Roundã¡ãœããïŒã§äœ¿çšãããäžžãã®çš®é¡ã¯ãããã©ã«ãã§éè¡ã®äžžããŸãã¯çµ±èšå®¶ã®äžžããšåŒã°ããŸãã ãã®æ¬è³ªã¯ã2ã€ã®æŽæ°ã®äžéã®æ°å€ã«å¯ŸããŠãVBã¯æãè¿ãå¶æ°ã«äžžããããšã§ãã 1.5ã¯2ã«äžžãããã4.5ã¯4ã«äžžããããŸããåŠæ ¡ã§æããããããã«å®éã«æ©èœããªãã®ã¯ã0.5ããåãäžããããã«æããããŸããïŒæè¡çã«ã¯ããŒããã暪ã«äžžããïŒã ãããããã®ååã瀺ãããã«ãéè¡ã®äžžãã«ã¯ãå€æ°ã®èšç®ã䜿çšããŠãååã«äžžãããšãã«åå²ããåžžã«ãéãæž¡ããããåžžã«ãéãç¶æãããããªããšããå©ç¹ããããŸãã ã€ãŸãã倧èŠæš¡ãªã»ããã§ã¯ãããã«ããããŒã¿ã®æªã¿ãæçµçãªçµ±èšåå·®ã«å¶éãããŸãã
éãã¯ã©ãããæ¥ãŸããïŒ äžžãã¯ããçŽæçã§å®çšçã§ãããåãæšãŠãéããªããŸãã LOBã¢ããªã±ãŒã·ã§ã³ãç¹ã«VBAã§å®è¡ãããExcelãã¯ããªã©ã®ã¢ããªã±ãŒã·ã§ã³ã§VBã䜿çšããããšãæ€èšããå Žåãåã«å°æ°ç¹ä»¥äžã®æ¡ãåé€ãããšåé¡ãçºçããå¯èœæ§ããããŸãã
å€æã®æ¹æ³ã¯åžžã«ç©è°ãéžãåé¡ã§ãããæ瀺çã«ç€ºãå¿
èŠãããããšã¯æããã ãšæããŸããã1ã€ãéžæããå¿
èŠãããå Žåã¯...
38. NotInheritableã¯ã©ã¹ããã³ã³ãã€ã«æã«å®è£
ããªãã€ã³ã¿ãŒãã§ãŒã¹ãšã®éã§å€æããããšã¯ééãã§ã¯ãããŸããã
äžè¬çã«ãã€ã³ã¿ãŒãã§ã€ã¹å®è£
ã®NonInheritableã¯ã©ã¹ããã§ãã¯ããŠããå Žåããã®ã¿ã€ããšãã®ãã¹ãŠã®åºæ¬ã¿ã€ãã®ãã¹ãŠã®ã€ã³ã¿ãŒãã§ã€ã¹ãç¥ã£ãŠãããããã³ã³ãã€ã«æã«ãã®ãããªå€æãå¯èœãã©ãããç解ã§ããŸãã åãç¶æ¿ãããå Žåããã®ãããªå€æãäžå¯èœã§ããããšã確信ããããšã¯ã§ããŸããããªããªããããã«ãã£ãŠåç
§ãããã©ã³ã¿ã€ã ãªããžã§ã¯ãã®åã¯ãå®éã«ãã®ã€ã³ã¿ãŒãã§ã€ã¹ãå®è£
ãããã掟çããåãæã£ãŠããããã§ãã ãã ããCOMçžäºéçšæ©èœã«èµ·å ããäŸå€ããããŸããã³ã³ãã€ã«æã«ãåãã€ã³ã¿ãŒãã§ã€ã¹ã«é¢ä¿ããŠããããšã衚瀺ãããªãå ŽåããããŸãããå®è¡æã«ã¯è¡šç€ºãããŸãã ãã®ããããã®ãããªå ŽåãVBã³ã³ãã€ã©ã¯èŠåãçæããŸãã
ãªãã§ïŒ VBãšCOMã¯ãå€ãè¿æã®åäŸã®é äžç·ã«è²ã¡ãŸããã ãã®ãããèšèªèšèšã«ã¯ãVBã.NET 1.0ã®ãªãªãŒã¹æã«COMã«ã®ã¿ååšããŠãããã®ã«å€å€§ãªæ³šæãæãããã€ãã®ãœãªã¥ãŒã·ã§ã³ããããŸãã
39. nullãæå³ã®ããåã«ã¢ã³ããã¯ïŒã¢ã³ããã¯ã¹ïŒããããšãããšãNullReferenceExceptionã§ã¯ãªãããã©ã«ãã®åã®å€ãçºçããŸãã
æè¡çã«ã¯ããã¯åç
§åã«ãåœãŠã¯ãŸããšæããŸãããããã§ãïŒ
CInt(CObj(Nothing)) = 0
ãªãã§ïŒ CInt(Nothing) = 0
ã§ãããå€æ°ãå
¥åãããã©ããã«é¢ä¿ãªããèšèªã¯ããçšåºŠäžè²«ããŠããåŸåããããŸãã ããã¯ãçµã¿èŸŒã¿ã®æå³ã®ããåã ãã§ãªããããããæ§é ã«ââé©çšãããŸãã 詳现ã«ã€ããŠã¯
ãïŒ25ã®
æ ¹æ ãåç
§ããŠãã ããã
40.ããã¯ã¹å解é€ã¯ããªããã£ãåã®å€æããµããŒãããŸã
VBãšCïŒã®äž¡æ¹ã§ã
Short
ã
Integer
ã«å€æã§ããŸãããããã¯ããã
Short
ã
Integer
ã«å€æããããšãããšã©ããªããŸããïŒ VBã§ã¯ã
Short
ã¯æåã«ã¢ã³ããã¯ããã次ã«
Integer
å€æãããŸãã CïŒã§ã¯ã
int
ã«å€æããåã«shortãæåã§ã¢ã³ããã¯ããªãéãã
InvalidCastException
ãã¹ããŒãããŸãã
ããã¯ããã¹ãŠã®å
éšå€æãã€ãŸãããã¯æ°å€åãæååãšæ°å€åã®éã®å€æãæååãšæ¥ä»ïŒã¯ãã10é²æ°ãããã³æ¥ä»ã¯ããªããã£ãåã§ãïŒã«é©çšãããŸãã
ãªãã§ïŒ ç¹°ãè¿ããŸãããäžè²«ããåäœã確ä¿ããããã«ãããã°ã©ã ãå®å
šã«åä»ããããŠããããObjectãšããŠåä»ããããŠãããããããªãã·ã§ã³ããå¥ã®ãªãã·ã§ã³ã«ãªãã¡ã¯ã¿ãªã³ã°ãããŠãããã©ããã äžèšã®
ïŒ39ãåç
§ããŠãã ããã
41. String
ãšChar
éã«ã¯å€æããããŸã
String
ãæåã®æåãè¡šãChar
ã«å€æãããŸããChar
String
åççãªæ¹æ³ã§ã®ã¿String
å€æãããŸãã
ç§ä»¥å€ã®èª°ãVBã®æåãªãã©ã«ã®æ§æãèŠããŠããªãã®ã§ïŒèŠããŠã¯ãããŸããïŒã
42. String
ãšChar
é
åã®éã«ã¯å€æããããŸã
String
ããã®ãã¹ãŠã®æåã§æ§æãããChar
é
åã«å€æãããŸããChar
é
åã¯ããã®ãã¹ãŠã®èŠçŽ ã§æ§æãããString
å€æãããŸãã
æ確ã«ããããã«ããããã®å€æã¯æ°ãããªããžã§ã¯ããäœæããŸãããå
éšã®
String
æ§é ã«ã¯ã¢ã¯ã»ã¹ã§ããŸããã
é¢çœãè©±ïŒ .NET 3.5ãš4.0ã®éã®
String.Join
ãªå€æŽãèŠã€ããïŒãŸãã¯å ±åããŠã調æ»ããŠããïŒã®ã¯ã.NETããŒã ã2çªç®ã®
String.Join
ãªãŒããŒããŒã
String.Join
ã«
ParamArray
修食åãè¿œå ããããã§ãã ã æ£ç¢ºãªä»®å®ã¯æéã®çµéãšãšãã«å€±ãããŸãïŒããããè¯ãæ¹åã«ïŒããä¿¡ããŠããããã«ã
ParamArray
修食åã䜿çšãããšã
Char
é
åãæååã«å€æããå¥ã®èŠçŽ ãšããŠãã©ã¡ãŒã¿ãŒé
åã«æž¡ãããšãã§ããããã«ãªããŸããã 楜ããããŒãã
43ããã³44ãæååããæ°å€åããã³æ¥ä»åãžã®å€æã¯ããªãã©ã«æ§æããµããŒãããŸãïŒéåžžïŒ
CInt("&HFF") = 255
CInt("1e6") = 1_000_000
CDate("#12/31/1999#") = #12/31/1999#
ããã¯ããŒã¹ãã¬ãã£ãã¯ã¹ã§æ©èœãã16é²æ°ïŒãŸãã¯8é²æ°ïŒå
¥åã
CInt("&H" & input)
ã«å€æããéåžžã«äŸ¿å©ãªæ¹æ³ã䜿çšã§ããããã«ããŸãã æ®å¿µãªãããVBã©ã³ã¿ã€ã ã¯ãã€ããªãã¬ãã£ãã¯ã¹ïŒBãŸãã¯
1_000
æ¡ã®ã°ã«ãŒã
1_000
ããµããŒãããããã«æŽæ°ãããŠããªãããããã®å·çæç¹ã§ãã®å¯Ÿç§°æ§ã¯äœäžããŠããŸãããããã¯æ¬¡ã®ããŒãžã§ã³ã§ä¿®æ£ãããããšãé¡ã£ãŠããŸãã ç§åŠè¡šèšæ³ã¯æ©èœããŸãããã¿ã€ããµãã£ãã¯ã¹ããªããæ¥ä»å€æãæšæºã®æ¥ä»åœ¢åŒããµããŒããããããISO-8601ã§äœ¿çšãããJSON圢åŒãæ©èœã
CDate("2012-03-19T07: 22Z") = #3/19/2012 02:22:00 AM#
ã
ãªãã§ïŒ 䟿å©ã以å€ã®çç±ã¯ç¥ããŸããã ããããïŒFFãU + FFã0xFFãªã©ãä»æ¥ã®ãããã¯ãŒã¯ã§ã»ãŒã©ãã«ã§ãããä»ã®äžè¬çãªåœ¢åŒã®ãµããŒããæäŸããããšæããŸãã ããã«ãããããçš®ã®ã¢ããªã±ãŒã·ã§ã³ã§ã®ç掻ã倧ãã«æ¥œã«ãªããšæããŸã...
45. Char
åãšæŽæ°åã®éã®å€æã¯ããChar
äœïŒïŒïŒïŒïŒããããã¹ãŠã®è¿œå ã®å€æã«ã€ããŠèªãã åŸãããªãã¯é©ããŸãããïŒ VBã¯
Char
ãš
Integer
éã®å€æãçŠæ¢ããŸãïŒ
CInt("A"c)
ã¯ã³ã³ãã€ã«ãããŸãããCChar(1)
ã¯ã³ã³ãã€ã«ãããŸããã
ãªãã§ïŒ äœãèµ·ãããã¯æ確ã§ã¯ãããŸããã éåžžããã®ãããªç¶æ³ã§VBã¯å®çšçãã€/ãŸãã¯çŽæçãªã¢ãããŒãã䜿çšããŸããã
CInt("1")
ãè¡šçŸããããã«ãèªè
ã®ååã¯æ°å1ïŒæåå€1ïŒãæåŸ
ããååã¯æ°å49ïŒASCII / UTFã³ãŒãæå1ïŒã ååã®ã±ãŒã¹ã§èª€ã£ãéžæããã代ããã«ãVBã«ã¯ãæåãASCII / Unicodeã³ãŒãã«ãããã³ãã®éã«
ChrW
ãããã
AscW
ãš
ChrW
å€æããããã®ç¹å¥ãªæ©èœã
ChrW
ãŸãã
è¡šçŸ
46.äœããªã<> null
VBã®ãªãã©ã«
Nothing
ã¯
nullãæå³ããŸããã ããã¯
ã䜿çšãããåã®ããã©ã«ãå€ããæå³ããåç
§åã®å Žåãããã©ã«ãå€ã¯nullã«ãªããŸãã éãã¯ã次ã®ç¶æ³ã§äœ¿çšããå Žåã«ã®ã¿éèŠã§ãã
- äœãéèŠââãªã¿ã€ããåããŸããããããŠ...
- 圌ããããããŠããããšã¯ãæèããæããã§ã¯ãããŸããã
ãããäœãæå³ãããã説æããããã€ãã®äŸãèŠãŠã¿ãŸãããã
1ã€ç®ã¯ãå°ãå¥åŠãããããŸãããããã®ããã°ã©ã ããTrueããåºåãããšããç解ã«ã»ãšãã©ã®äººãæåããããšã¯ãªããšæããŸãã
Module Program Sub Main() Dim i As Integer = 0 If i = Nothing Then Console.WriteLine("True") End If End Sub End Module
githubãœãŒã¹ã³ãŒããã®çç±ã¯éåžžã«ç°¡åã§ãã
Integer (0)
ããã®ã¿ã€ãã®ããã©ã«ãå€
Integer (0)
ãšæ¯èŒããŠããŸãã ãã®åé¡ã¯ãNull蚱容ã®æå³ã®ããåãè¿œå ãããšVB2005 / 2008ã§çºçããŸãã ãã®äŸãèŠãŠãã ããïŒ
Module Program Sub Main() Dim i = If(False, 1, Nothing) End Sub End Module
githubãœãŒã¹ã³ãŒãã¿ã€ã
i
ã
Integer?
ããšãã©ã®ããã«ææ¡ã§ã
Integer?
ïŒ
Nullable(Of Integer)
ïŒã ããããããã¯ããã§ã¯ãããŸããã
Nothing
ã³ã³ããã¹ãããåãååŸããããã®ã³ã³ããã¹ãã®å¯äžã®åã¯ç¬¬2ãªãã©ã³ãããååŸãããããã¯åçŽãª
non-nullable Integer
ïŒæè¡çã«ã¯ã
Nothing
ã«ã¯åããã
Nothing
ãïŒã ãã®åé¡ãèŠããã1ã€ã®æ¹æ³ã¯ã次ã®äŸã§ãã
Module Program Sub Main() M(Nothing) End Sub Sub M(i As Integer) Console.WriteLine("Non-nullable") End Sub Sub M(i As Integer?) Console.WriteLine("Nullable") End Sub End Module
githubãœãŒã¹ã³ãŒãç¹°ãè¿ãã«ãªããŸãããããã§ã¯çŽæçã«ã
Nothing
ã¯ãnullableããã³ããè¿œå ããèšèªã¯
nullable
ãåãå
¥ãããªãŒããŒããŒããéžæããŸãããããã§ã¯ãããŸããïŒã
non-nullable
ãã¯ãæãå
·äœçããªã®ã§éžæããŸãïŒã å°ãªããšããCïŒã®nullã®ããã«ãåŒ
Nothing
ã¯
Integer
ã¯ãŸã£ããé©çšããããäŸå€ã¡ãœããã«ãã£ãŠnullableãªãŒããŒããŒããéžæããããšä»®å®ã§ããŸãããããã¯
Nothing = null (Is null?)
ãšãã誀ã£ãèãã«åºã¥ããŠã
Nothing = null (Is null?)
ã
NuanceïŒ VBã®
Nothing
ã«äžèŽããæ°ãã
default
åŒãCïŒ7.1ã«è¿œå ãããŸããã
null
代ããã«
default
ã䜿çšããŠCïŒã§äžèšã®3ã€ã®äŸããã¹ãŠæžãæãã
ãšããŸã£ããåãåäœã«ãªããŸãã
ããã«ã€ããŠäœãã§ããŸããïŒ ããã€ãã®ææ¡ããããŸããããŸã åè
ã¯ããŸããã
Nothing
æå¹ãªåã«å€æããã null
ãæå¹ãªæå¹ãªåã§ã¯null
ã§ãªãããšãèŠåãããã³ã«èŠåã衚瀺ããŸãã- å®è¡æã®å€ã次ã®ããããã«ãªããã³ã«ã
Nothing
ãChrW(0)
ã ChrW(0)
ã False
ã #1/1/0001 12:00:00 AM#
ChrW(0)
#1/1/0001 12:00:00 AM#
ChrW(0)
#1/1/0001 12:00:00 AM#
ãŸãã¯New T
ïŒä»»æã®æ§é ã®ããã©ã«ãå€ChrW(0)
ã«çŸããå±éããŸãäžèšã®ãªã¹ãã - ãNullãnoãreallyïŒããæå³ããæ°ããæ§æãè¿œå ããŸã
Null
Nothing?
If(False, 0?, Nothing)
ãå€ãnullableã«ã©ããããŠåãæšæž¬ããã®ã«åœ¹ç«ã€ãµãã£ãã¯ã¹ïŒïŒïŒã®åœ¢åŒã§æ°ããæ§æãè¿œå ããŸãIf (False, CInt? (0), Nothing)
ããã«ãåæšè«ã«ãã³ããæäŸããããããããã«ãçµã¿èŸŒã¿åã«NULLå
¥åå¯èœãªå€ææŒç®åãè¿œå ããŸã
ã³ã¡ã³ãã
Twitterã§ããªãã®æèŠãèãããã§ãã
èŠçŽãããšïŒ
- 以å-VB6ãšVBAã«ã¯ããªãããããã«ããã空ããããã³ãæ¬ èœãããããç°ãªãããšãæå³ããŸãã
- 2002-VB.NETã«ã¯
Nothing
ïŒç¹å®ã®ã³ã³ããã¹ãã®ããã©ã«ãå€ïŒã®ã¿ããããCïŒã«ã¯null
ã®ã¿ãããnull
ã - 2005-CïŒã¯
default(T)
ïŒã¿ã€ãT
ããã©ã«ãå€default(T)
è¿œå ãdefault(T)
ãããã¯ãæ°ããè¿œå ããããžã§ããªãã¯ã«ãããå€ãåæåããå¿
èŠãããç¶æ³ãäœæãããããã§ãã ãã®ã¹ã¯ãªããã¯ãã§ã«Nothing
ã«ãã£ãŠéããããŠãããããVBã¯äœããNothing
ã - 2017-
T
æå®T
åé·ãŸãã¯äžå¯èœãªå€ãã®ã·ããªãªããããããCïŒã¯default
ïŒã³ã³ããã¹ãã®default
å€ïŒãè¿œå ãdefault
VBã¯ã
Null
åŒïŒãŸãã¯åçã®ãã®ïŒã®è¿œå ã«æµæãç¶ããŠããŸããçç±ã¯æ¬¡ã®ãšããã§ãã
- æ§æã¯ç Žå£çãªå€æŽã«ãªããŸãã
- æ§æãå€æŽãå£ãããšã¯ãããŸããããã³ã³ããã¹ãã«ãã£ãŠç°ãªãããšãæå³ããŸãã
- æ§æã¯ããŸãã«ãç®ç«ããªããªããŸãïŒããšãã°ã
Nothing?
ïŒã Nothing
and Nothing?
ã«ã€ããŠå€§å£°ã§è©±ãå¿
èŠããããšæ³åããŠãã ããNothing?
人ã«äœãã説æããããã«ã - æ§æãtooãããŸãïŒäŸïŒ
Nothing?
ïŒã - nullåŒã¹ã¯ãªããã¯
Nothing
ã«ãã£ãŠæ¢ã«éããããŠããããã®é¢æ°ã¯ã»ãšãã©ã®å Žåå®å
šã«åé·ã§ãã - ã©ãã§ãããã¹ãŠã®ããã¥ã¡ã³ããšãã¹ãŠã®æ瀺ãæŽæ°ããŠãæ°ããæ§æã®äœ¿çšãæšå¥šããå¿
èŠããããŸããããã¯ãã»ãšãã©ã®ã·ããªãªã§åºæ¬çã«å»æ¢ãã
Nothing
宣èšããŸãã - å®è¡æãé
延ãã€ã³ãã£ã³ã°ãå€æãªã©ã«é¢ããŠã
Nothing
ãNull
ãåãããã«åäœããããšã¯ããNothing
ã - åºããããªéã®ãããªãã®ã§ãã
ãã®ãããªãã®ã
ãªããããã¯ïŒé¢é£ããïŒäžèšã®2çªç®ã®äŸãšéåžžã«ãã䌌ãŠããŸãããåã®æšè«ã¯ãããŸããã
Module Program Sub Main() Dim i As Integer? = If(False, 1, Nothing) Console.WriteLine(i) End Sub End Module
githubãœãŒã¹ã³ãŒããã®ããã°ã©ã ã¯0ã衚瀺ããŸããåãçç±ã§2çªç®ã®äŸãšãŸã£ããåãããã«åäœããŸãããé¢é£ããŠããŠãå¥ã®åé¡ã瀺ããŠããŸãã çŽæçã«ã
Dim i as Integer? = If(False, 1, Nothing)
Dim i as Integer? = If(False, 1, Nothing)
ã
Dim i As Integer? : If False Then i = 1 Else i = Nothing
ãšåãããã«åäœãã
Dim i as Integer? = If(False, 1, Nothing)
Dim i As Integer? : If False Then i = 1 Else i = Nothing
Dim i As Integer? : If False Then i = 1 Else i = Nothing
ã ãã®å Žåãæ¡ä»¶åŒ
(If)
ã¯æçµåã®æ
å ±ããªãã©ã³ãã«ããã¹ã¹ã«ãŒãããªããããããã¯ããã§ã¯ãããŸããã ããã«ãããæçµçãªïŒã³ã³ããã¹ãïŒã¿ã€ãã³ã°ïŒ
Nothing
ã
AddressOf
ããªãã©ã«ã®é
åãã©ã ãåŒãããã³è£éãããæååïŒãšåŒã°ãããã®ã«äŸåããVBã®ãã¹ãŠã®åŒããäžè¬çãªéã³ã³ãã€ã«ããéãã«èª€ã£ãå€ã®äœæã«è³ããŸã§ã®åé¡ã«å解ãããããšã
AddressOf
ãŸã倧声ã§äŸå€ãã¹ããŒããŸãã ã³ã³ãã€ã«ãããŠããªããªãã·ã§ã³ã®äŸã次ã«ç€ºããŸãã
Module Program Sub Main() Dim i As Integer? = If(False, 1, Nothing) Console.WriteLine(i) Dim operation As Func(Of Integer, Integer, Integer) = If(True, AddressOf Add, AddressOf Subtract) End Sub Function Add(left As Integer, right As Integer) As Integer Return left + right End Function Function Subtract(left As Integer, right As Integer) As Integer Return left - right End Function End Module
githubãœãŒã¹ã³ãŒããã®ããã°ã©ã ã¯ã³ã³ãã€ã«ãããŸããã 代ããã«ãäž¡æ¹ã®
AddressOf
åŒã
Func(Of Integer, Integer, Integer)
ããªã²ãŒã
Func(Of Integer, Integer, Integer)
ãåä¿¡ããããšã
AddressOf
æå³ããŠããå ŽåãåŒã®ã¿ã€ããå€å¥ã§ããªããšãããšã©ãŒã
If
åŒã§å ±åããŸãã
,
Nothing
null (),
Nothing
nullability
()
If(,,)
Nothing
( ) () â ,
.
47. ;
«3»:
Module Program Sub Main() Dim i As Integer = 3 M((i)) Console.WriteLine(i) End Sub Sub M(ByRef variable As Integer) variable = -variable End Sub End Module
GitHubC# «-3». , VB â ,
. ,
M(3)
,
M(i)
,
i
, . C# ( ) , M .
ãªãã§ïŒ VB
. Quick Basic (Copyright 1985), . ,
2002 , .
â1: « » , Visual Basic .NET.
â2: Roslyn ( ,
( ) ( )), : . C# ,
((a + b) * c a + (b * c))
. , C#, C++, , , , . : « VB?» « C#?»
source.roslyn.io â
BoundParenthesized
VB C#. , , .
48. Me
â
VB.NET
Me
. , - , â , Me Structure . Me . C#
this
,
this
.
49.
VB, , :
Class C Sub M() Extension() End Sub End Class Module Program Sub Main() End Sub <Runtime.CompilerServices.Extension> Sub Extension(c As C) End Sub End Module
GitHubC# ( something.Extension). , C#, ,
this.Extension()
.
ãªãã§ïŒ ,
'Me.'
, , , , . VB.NET . , .
50. (Static imports will not merge method groups)
VB « » (Java-, C# VB). ,
Imports System.Console
WriteLine()
. 2015 C# . VB Shared- ,
System.Console
System.Diagnostics.Debug
,
WriteLine
, . C# , , .
ãªãã§ïŒ , , VB , C# ( ). , ( , ), ⊠, .
, VB , VB , , , , , (
#6 ). VB . , VB 2002 .
51 52. (Partial-name qualification & Smart-name resolution)
:
- , â ( ).
System
System.Windows.Forms
â , , System
System.Windows
System.Windows
System.Windows.Forms
. - , , , .
System
Windows
, Windows
Form
.
, , . . VB Imports ,
using
C# .
, VB
System
,
System
,
System
. , . ,
ExtensionAttribute
,
<Runtime.CompilerServices.Extension>
<System.Runtime.CompilerServices.Extension>
.
C# .
using System
System.Threading
Threading
.
, C# , . ,
System
,
System.Threading
Threading
. , , , , .
, , VB, C# ,
Imports
/
using
, C# using , , using .
(Quantum Namespaces) ( ), ! VB , . ,
System
ComponentModel
System.Windows.Forms
ComponentModel
?
ComponentModel
. ,
ComponentModel.PropertyChangedEventArgs
, ( , ).
System.Windows.Forms
(, , , , ), (ambiguity errors).
VB2015 (Smart Name Resolution),
System
System.Windows.Forms
ComponentModel
, ,
System.ComponentModel
System.Windows.Forms.ComponentModel
, . , , , , . , , , ..
ComponentModel.PropertyChangedEventArgs
System.ComponentModel.PropertyChangedEventArgs
,
System.Windows.Forms.ComponentModel.PropertyChangedEventArgs
. , .
,
Windows
, ( ) ( ) ( ).
WinForms/WPF
UWP
.
53. Add
#33 , VB - , . , , â , :
Class Contact Property Name As String Property FavoriteFood As String End Class Module Program Sub Main() Dim contacts = New List(Of Contact) From { {"Leo", "Chocolate"}, {"Donnie", "Bananas"}, {"Raph", "The Blood of his Enemies"}, {"Mikey", "Pizza"} } End Sub <Runtime.CompilerServices.Extension> Sub Add(collection As ICollection(Of Contact), name As String, favoriteFood As String) collection.Add(New Contact With {.Name = name, .FavoriteFood = favoriteFood}) End Sub End Module
GitHubC# , Roslyn C#, . , (
, ), VS2015.
54. ,
, VB
Dim buffer(expression) As Byte
Dim buffer = New Byte(expression) {}
expression + 1
.
Microsoft BASIC,
DIM
( dimension â ). , , , : 0 expression. Microsoft BASIC 1 ( , 1984), ( ), 2002 .
, - , , VB , BASIC C , , C, C- . ,
buffer(10)
0 10, 9!
55. VB - , C#
, . , VB ( ) , â . :
CType({1, 2, 3}, Short())
CType(New Integer() {1, 2, 3}, Short ())
, Integer
Short
.CType({1, 2, 3}, Short())
New Short() {1, 2, 3}
. .
, , VB , C#. , :
Dim empty As Integer() = {}
:
Dim array As Predicate(Of Char)() = {AddressOf Char.IsUpper, AddressOf Char.IsLower, AddressOf Char.IsWhitespace}
( ):
Dim byteOrderMark As Byte() = {&HEF, &HBB, &HBF} '
.
,
IList(Of T)
,
IReadOnlyList(Of T)
,
ICollection(Of T)
,
IReadOnlyCollection(Of T)
IEnumerable(Of T)
, , ,
ParamArray IEnumerable
.
ãªãã§ïŒ , VB. , . 2008 VB C# «» {}, - ( , , ). , , , + , . .
56.
, LINQ. , .
, ,
.
57. CType, DirectCast C#
/ VB C#.
VB
CType
:
- ;
- ( );
- , ,
Long
Integer
(. «»); - (unboxes) ;
- ;
- (
CTypeDynamic
).
VB
DirectCast
:
- ;
- ;
- (
Integer Byte
); - ;
- ( );
- .
C# â
(Type)expression
:
CType
C# , . , . VB C# , IL .
, C#, , . .
,
CType
, (, ).
CType
,
DirectCast
, . , , IL :
Object
(
ValueType
) CLR «unbox» VB-, , (,
Short
Integer
). , , C#. . , .
ãªãã§ïŒ . , , , , .
58. «»
, ,
5 Mod 2 * 3
5 VB, «» C#
5 % 2 * 3
3.
, , . , (, (\) VB), , ,
.
!59. ; + & ; + VB <> + C#
, + () & () VB + C#.
String
:VB- â1â + 1 = 2.0
- â1â & 1 = â11â
C#, + &VB- âobj: â + AppDomain.CurrentDomain ' Error: + not defined for String and AppDomain.
- âobj: â & AppDomain.CurrentDomain ' Error: & not defined for String and AppDomain.
- âobj: â + CObj(AppDomain.CurrentDomain) ' Exception, no + operator found.
- âobj: â & CObj(AppDomain.CurrentDomain) ' Exception, no & operator found.
C#- «obj: » + AppDomain.CurrentDomain == «obj: » + AppDomain.CurrentDomain.ToString()
- «obj: » + (object)AppDomain.CurrentDomain == «obj: » + AppDomain.CurrentDomain.ToString()
- «obj: » + (dynamic)AppDomain.CurrentDomain == «obj: » + AppDomain.CurrentDomain.ToString()
:VB- 1 + 1 = 2
- 1 & 1 = â11â
C#String Enum:VB- âToday: â + DayOfWeek.Monday ' Exception: String «Today: » cannot be converted to Double.
- âToday: â & DayOfWeek.Monday = âToday: 1â
- âToday: â & DayOfWeek.Monday.ToString() = âToday: Mondayâ
C#- «Today: » + DayOfWeek.Monday == «Today: Monday»
: , + VB, - . + , , - . ãªãã§ïŒ ãªããªãïŒ
- â10â â â1â = 9.0,
- â5â * â5â = 25.0,
- â1â << â3â = 8,
- â1â + 1 = 2.0,
- â1â + â1â = â11â
. â .
: +,
. , &, , (
, ). , , .
60. : 3 / 2 = 1,5
â :
« ?» . «». :
« . ?»VB C#.
C, , ,
« 5 9?» , \. , , , , 0 ( , -
INumeric
).
61. ^ Math.Pow
Math.Pow
. , . , (
custom
) ( ,
System.Numerics.BigInteger
).
: F# **, VB F# :
op_Exponent
op_Exponentiation
. F#
Pow
. . , .
62. =/<> /
C# '==' () , , ( ). VB . VB (
Is/IsNot
) .
: - Roslyn , . . . VB , = , C# , , , .
63. =/<> ( )
VB .
-, ( ) - ( ), ,
Option Compare Binary
Option Compare Text
.
Option Compare Binary
, , VS.
( ), ,
API. ããã¯ïŒ
- /: âAâ = âaâ/âAâ <> âaâ
- : âAâ > âaâ
Select Case: Select Case âAâ : Case âaâ
:
Equals: âAâ.Equals(âaâ)
Contains: âAâ.Contains(âaâ)
Distinct: From s In {âAâ, âaâ} Distinct
, , : VB . ,
Option Compare
, «Empty».
Module Program Sub Main() Dim s As String = Nothing If s = "" Then Console.WriteLine("Empty") End If End Sub End Module
GitHubs = "" VB â
String.IsNullOrEmpty(s)
.
, , , , , . , , .
ãªãã§ïŒ Option Compare Text
, , . , , .
, , , , .
, , . , . , , (collation) SQL Server, . , VB VB6, VBA Office, Excel Access, VBScript Windows, -, -⊠. , , .NET API , Option Compare Text, . , .NET API, .
null, , . VB6 .
String
"". , VB
String
. VB,
Left
Mid
,
String
. null .
Len(CStr(Nothing)) = 0
Left(CStr(Nothing)
,
5) = ""
,
CStr(Nothing).Length
CStr(Nothing).Trim()
.
,
?
ã ( ).
:, , , . ! VB , ,
"String A" = "String B"
,
Microsoft.VisualBasic.CompilerServices.Operators.CompareString
, - , , . LINQ- . , VB ( ). , , - , . LINQ-to-SQL, LINQ-to-Entities , Microsoft. , VB , !
, C#, VB, LINQ . : 1) , VB , , 2) , VB , , LINQ-. , VB ().
: , « API».
Option Compare
VB,
InStr.Replace
Microsoft.VisualBasic.Strings
. , ?
, , , ? , , , : , , .
64. Nullable ( null )
VB C# - nullable. , (null-propagation).
SQL, , , null. , (, +), null, null.
"?."
:
obj?.Property obj
null, null, .
nullable , VB, C# . - : .
VB, nullable , null, null . 1 + null null null + null null. , (, = <>) C#:
- VB,
Is/IsNot
, Boolean?
- C# (==, !=, >, <, >=, <=)
bool
bool?
VB ( nullable ) null
null .
Boolean
=
Boolean?
,
True
,
False
null
.
. C#
non-nullable bool
,
.
,
. null. VB
NULL =
NULL â
NULL , TRUE.
, :

.
Null , , , C# .
. C# VB,
« null?» C#
(if (value == null))
. VB , VB (=/<>)
(Is/IsNot)
, VB
Is Nothing
non-nullable Boolean
.
, VB null, null.
And/AndAlso
Or/OrElse
.
Integer?
( ), VB, C# null, :
- 1 AND NULL NULL
- 1 OR NULL NULL
Boolean?
, VB .
- FALSE AND NULL FALSE
- TRUE OR NULL TRUE
- TRUE AND NULL NULL
- FALSE OR NULL NULL
,
True/False
, , null. ,
AndAlso
OrElse
.
C# (&&/||) (&/|)
nullable boolean (bool?)
. , , non-nullable boolean nullable boolean .
?VB , - :
Imports System.ComponentModel Class BindableRange Implements INotifyPropertyChanged Property _EndDate As Date? Property EndDate As Date? Get Return _EndDate End Get Set(value As Date?)
GitHub, , , , «EndDate change» . , ,
VB null ? ,
EndDate
, , ,
Nothing
.
VB :
«, , . » :
If value <> _EndDate Then _EndDate = value RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(NameOf(EndDate))) End If
! . ,
non-nullable . ,
. , :
If value Is Nothing AndAlso _EndDate Is Nothing Then Return If value <> _EndDate Then Return
?, C# , VB. ( nullable , ), , null.
null â
«» « » . .
null « » «» . , , : comparer, , comparer . Roslyn,
Optional(Of T)
, , , null, , .
, NULL « », VB :
- , « , ?» « ».
- : « , ?» « ».
, ,
SQL- . , NULL SQL , NULL. . , , NULL . , . , , ( ). , , , , , NULL , SQL ( ).
VB.
nullable 2008 , VB ?LINQ to SQL
VB , , , , , , LINQ- . !
. SQL Server, ,
SET ANSI_NULLS OFF , SQL- C#,
WHERE Column = NULL
. , , OFF ( ). SQL Server ( ) . :
« ? . , - Option ANSI_NULLS Off VB.NET?» . :

, , , , , SQL Server, VB.
ãã®ãããªãã®ã
65. 1:1
, VB , , , . VB - , .
, , , , . VB , , , , , VB .
9.8.4 .
66. Function() a = b () => a = b
. ,
() => expression
C#
Function() expression
VB.
Function()
-, - , VB.
a = b
,
a
b
(
Boolean
),
b
. - (delegate relaxation) VB ( -) Sub- ( ). .
() => a = b
C# VB â
Sub() a = b
. â -
, .
=, , . (
Sub
-) , (
Function
-) .
67. Async Function
async void
C#
async
-, , ,
Task
void
, ,
Task
, .
VB.NET , ..
void Async
Async Sub
,
Task
Task(Of T)
â
Async Function
. , , VB, (relaxing)
Task Async
void
.
Async Sub
, , .
68. () VB
, VB:
Class Foo
GitHubVB,
C#. -,
Foo
Select
, ,
Where
.
Select
, ,
Select
,
Integer
. C# ,
.Where
(
Select
). , , .
LINQ API. , VB C#, . , C# , « », , , , . - , «» , , -.
, VB
, , C# , .
, Roslyn, :
« (range variables)?» « ?» . . , VB ,
Let
, C# â . , VB, C# 2012 , :
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CSharpExamples { struct Point { public int X { get { return 0; } } public int Y { get { return 0; } } } class Foo { public IEnumerable<Point> Select<T>(Func<string, T> selector) { return new Point[0]; } } static class Program { static void Main(string[] args) { var c = new Foo(); var q = from X in c let Y = "" select Y.CompareTo(-1); } } }
GitHub, â ? X, â
string
.
let
Y
, string. , Point,
X
Y
, ,
int
X
Y
, «» .
Y
select
,
int
int
`, ⊠.
,
« ?» . VS2015 C# , «». , Roslyn C#, . , ( , ), - .
ãªãã§ïŒ , , , . , , VB C# .
69 70. As
From
cast
; 'As'
( , âŠ)
From x As Integer In y
VB, ,
from int x in y
C#.
-, C# , ( ) .
.Cast<T>()
. VB , , , , .
-, ,
.Cast
( ). , , ,
.Cast
.Select
.
ãªãã§ïŒ æãããã¯ãããŸããã VB . ,
For Each x As T In collection
,
As T
.
From
As
For Each
( ,
As
).
71-75. Select
, ,
äŸïŒ
From x In y Where x > 10
. , Select
.From x In y Select x Where x > 10
.From x In y Select x
, From x In y Select x = x
, x
â x
, x
â Select
. Select
.From x In y Select z = x.ToString()
, x
.From x In y Select x.FirstName
, From x In y Select FirstName = x.FirstName
.From x In y Select x.FirstName, x.LastName
â From x In y Select New With {x.FirstName, y.LastName}
, , . IEnumerable(Of $AnonymousType$)
, .
ãªãã§ïŒ (
Amanda Silver ). !
- ,
Select
, SQL , Select
, . LINQ VB Select , SQL, From . - , , .
- ,
Select
, SQL, - - . VB comma separated ( ) -. - ,
Select
, , , , , , , â .
? , , - , , :
Module Program Sub Main() Dim numbers = {1, 2, 3}
GitHubBC36606: Range variable name cannot match the name of a member of the 'Object' class
BC30978: Range variable 'âŠ' hides a variable in an enclosing block or a range variable previously defined in the query expression
â ,
Object
, , , , . (
n.ToString()
), . , .
76+.
. ⊠⊠. ⊠20-25 (
â .. ).
åºåã®åã 15-16 - .NET- DotNext 2019 Piter . , . , . .