рдпрджрд┐ C # рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдирд▓ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП Nullabe рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдпрд╣ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд 2 рд░реВрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд▓реЗ рд╕рдХрддрд╛ рд╣реИ (рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдпрд╣рд╛рдВ рдЗрдВрдЯ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдкреНрд░рдХрд╛рд░ рдХрд┐рд╕реА рднреА рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рддреНрдпрд╛рдЧ Nullabe Nullable<T> , - ,
рд╡реЗ рджреЛрдиреЛрдВ рдмрд░рд╛рдмрд░ рд╣реИрдВред
Nullable class рдХрдИ рд╕рд╣рд╛рдпрдХ рдЧреБрдг рдФрд░ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдЕрд╢рдХреНрдд рдкреНрд░рдХрд╛рд░ рдФрд░ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред рдпреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИрдВ:
- HasValue
- рдореВрд▓реНрдп
- GetValueOrDefault ()
- GetValueOrDefault (T)
рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдл # рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдЬреЛ рдХрд┐ рдЕрдзрд┐рдХ рдПрдл # рдЕрдиреБрдХреВрд▓ рдкреНрд░рдХрд╛рд░ рд╣реИ рдЬреЛ рд╢реВрдиреНрдп рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "рдордИ рдкреНрд░рдХрд╛рд░ рдорд╛рди" рдпрд╛ "рдордИ рдирд╣реАрдВ рд╣реИ" рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдЪреАрдЬреЛрдВ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИред рдорд╛рдиред " рдпрд╣ рдЕрд╢рдХреНрдд рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдВрдд рдореЗрдВ рдпрд╣ рдПрдл # рдкреНрд░рдХрд╛рд░ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рдЗрд╕реЗ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдПрдл # рдЪреАрдЬреЛрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рд╡рд┐рдХрд▓реНрдк рдПрдл # рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рди рдХрд┐ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдПред рдпрд╣ .NET Nullable рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдорд╛рди
рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рдХреЛрдИ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ; рдЕрдиреНрдпрдерд╛,
рдХреБрдЫ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ (...) рдПрдХ рдорд╛рди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдорд╛рди рдХреБрдЫ рдФрд░ рдХреЛрдИ рдирд╣реАрдВ рдПрдХ рдкреИрдЯрд░реНрди рдХреЗ рд╕рд╛рде рдорд┐рд▓рд╛рди рдХрд░рддреЗ рд╕рдордп рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣рдо рдЗрд╕ рдкреЛрд╕реНрдЯ рдореЗрдВ рджреЗрдЦреЗрдВрдЧреЗред
Nullable рдХреА рддрд░рд╣, F # Option рдкреНрд░рдХрд╛рд░ рдореЗрдВ рдХрдИ рд╕рд╣рд╛рдпрдХ рдЧреБрдг / рд╡рд┐рдзрд┐рдпрд╛рдБ рд╣реЛрддреА рд╣реИрдВ, рдЬрд┐рдиреНрд╣реЗрдВ рдиреАрдЪреЗ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдХреЛрдИ рдирд╣реАрдВ'рдЯреА рд╡рд┐рдХрд▓реНрдкрдПрдХ рд╕реНрдерд┐рд░ рд╕рдВрдкрддреНрддрд┐ рдЬреЛ рдЖрдкрдХреЛ рдХрд┐рд╕реА рдХреЗ рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдорд╛рди рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред
IsNoneboolрдЕрдЧрд░ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╕рдЪ рд╣реИред
IsSomeboolрдпрджрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рднреА рдорд╛рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдпрд╣ рд╕рд╣реА рд╣реИред
рдХреБрдЫ
'рдЯреА рд╡рд┐рдХрд▓реНрдкрдПрдХ рд╕реНрдерд┐рд░ рд╕рджрд╕реНрдп рдЬреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдмрдирд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рдХреЛрдИ рдирд╣реАрдВ рд╣реИред
рдореВрд▓реНрдп'рдЯреА
рдЖрдзрд╛рд░ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрд╛ рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ рддреЛ NullReferenceException рдлреЗрдВрдХрддрд╛ рд╣реИред
рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛
рдЗрд╕рд▓рд┐рдП, рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ рдХреНрдпрд╛ рд╣реИрдВ, рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рдмрдирд╛рддреЗ рд╣реИрдВред рдЖрдЗрдП рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВрдиреЗ рд╕рд╣рд╛рдпрдХ рддрд░реАрдХреЗ IsSome / IsNone рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИред рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ, рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдирдореВрдиреЗ рдХреЗ рд╕рд╛рде рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрдкрдХреЛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╡рд┐рдХрд▓реНрдк рд╕рд╣рд┐рдд рд╕рднреА рдорд╛рдорд▓реЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореИрдВ рдЖрдкрдХреЛ рджрд┐рдЦрд╛рдКрдВрдЧрд╛ рдХрд┐ рдЬрдм рдЖрдк рд╣реЗрд▓реНрдкрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓реЗрддреЗ рд╣реИрдВ, рддреЛ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдХреБрдЫ рдЧрд▓рдд рдХрд░рдирд╛ рдХрд┐рддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд╣рд▓реЗ рд╣рдо рд╕рд╣реА рдорд╛рдорд▓реЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВред
let someInt = Some(43) let someString = Some("cat") let printTheOption (opt :Option<'a>) = printfn "Actual Option=%A" opt printfn "IsNone=%b, IsSome=%b Value=%A\r\n\r\n" opt.IsNone opt.IsSome opt.Value printfn "let someInt = Some(43)" printfn "let someString = Some(\"cat\")" printfn "printTheOption (someInt)" printTheOption someInt printfn "printTheOption (someString)" printTheOption someString

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдо рдЗрд╕ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдБ, рдЬрд╣рд╛рдБ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рдХрд▓реНрдк рдорд╛рди рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдо PrintTheOption рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╛рд╕ рдХрд░реЗрдВрдЧреЗ:
let demoNone = None let printTheOption (opt :Option<'a>) = printfn "Actual Option=%A" opt printfn "IsNone=%b, IsSome=%b Value=%A\r\n\r\n" opt.IsNone opt.IsSome opt.Value printfn "let demoNone = None" printfn "printTheOption demoNone" printTheOption demoNone

рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдордиреЗ рд╕рд╣рд╛рдпрдХ рд╕рдВрдкрддреНрддрд┐ Option.Value рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдХрд▓реНрдк рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ NullReferenceException рдорд┐рд▓реАред рдпрд╣ рдКрдкрд░ рджреА рдЧрдИ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк рд╕рд╣рд╛рдпрдХ рдЧреБрдгреЛрдВ рдФрд░ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдЕрдкрд╡рд╛рдж рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдареАрдХ рд╣реИ, рдЖрдк IsNone рдкрджреНрдзрддрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЬрдм рдЖрдк рд╕рд┐рд░реНрдл рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛рдл рдкреИрдЯрд░реНрди рдореИрдЪ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╣рдореЗрд╢рд╛ рдЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдВрдЧреЗред
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ рд╕реНрд╡реАрдХрд╛рд░ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рдкреВрдЫреЗрдВ рдХрд┐ C # рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЖрдкрдХреЛ рдХрд┐рддрдиреА рдмрд╛рд░ рд╢реВрдиреНрдп рдорд╛рди рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреА рдереАред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ .NET рдХреЛрдб рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рдирд┐рд░реНрдорд╛рдг, рдЬреИрд╕реЗ рд╢рд╛рдпрдж рдирд▓ рдореЛрдирд╛рдб, рд╢рд╛рдорд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд┐рдпрд╛ред
рдЗрд╕рд▓рд┐рдП, рдЕрдм рдЬрдм рд╣рдордиреЗ рд╕рд╣рд╛рдпрдХ рд╡рд┐рдзрд┐рдпреЛрдВ / рдЧреБрдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЦрддрд░рд╛ рджреЗрдЦрд╛ рд╣реИ, рддреЛ рдЖрдЗрдП рдЕрдм рдЕрдкрдирд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЗрди рдЕрдкрд╡рд╛рджреЛрдВ рд╕реЗ рдХреИрд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ:
et printTheOption (opt :Option<'a>) = match opt with | Some a -> printfn "opt is Some, and has value %A" a | None -> printfn "opt is None" let demoNone = None let someInt = Some 1 let someString = Some "crazy dude in the monkey house" printTheOption demoNone printTheOption someInt printTheOption someString
рдореЗрд░реА рдирд┐рдЬреА рд░рд╛рдп рд╣реИ рдХрд┐ рдпрд╣ рдХреЛрдб рд╕реЗ рдЕрдзрд┐рдХ рдкрдардиреАрдп рд╣реИ рдЬреЛ рд╣рд░ рдЬрдЧрд╣ IsSome / IsNone рдХреЗ рд╕рд╛рде рдЕрдВрдХрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рд╣рд░ рдХрд┐рд╕реА рдХрд╛ рд╡реНрдпрд╡рд╕рд╛рдп рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд░рд▓ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рд╣рдордиреЗ рдпрд╣рд╛рдВ рд╕рднреА рдореВрд▓ рдмрд╛рддреЛрдВ рдХреЛ рдХрд╡рд░ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕ рддрдереНрдп рдХреЛ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдо рдЕрд╢рдХреНрдд
рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ Nullabe рдХреА рддреБрд▓рдирд╛ рдореЗрдВ F # рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА, рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрдмрдХрд┐ Nullable рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди .NET рдореЗрдВ рдирд┐рдпрдорд┐рдд рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИред рдареАрдХ рд╣реИ, рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдЬреАрдд рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рдЖрдк .NET рдореЗрдВ рд╕рдВрджрд░реНрдн рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдПрдХ рдкреЙрдЗрдВрдЯрд░ рд╕рдВрджрд░реНрдн рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╢реВрдиреНрдп рдкрд░ рд╕реЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдкреНрд░рдХрд╛рд░ рд╡рд╣реА рд░рд╣рддрд╛ рд╣реИ рдЬреИрд╕рд╛ рдХрд┐ рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдЬрд┐рд╕рдореЗрдВ рдвреЗрд░ (рд╣реАрдк) рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрд╛ рдПрдХ рд╡реИрдз рд╕рдВрджрд░реНрдн рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдЕрд╢рдХреНрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрдирд╛ рд╕рд╛рдорд╛рдиреНрдп рд╣реЛрдЧрд╛:
string s1 = "cats"; int s1Length = s1.Length; string s2 = null; int s2Length = s2.Length;
рдЗрд╕реЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬрдм рд╣рдо рдЗрд╕реЗ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ NullReferenceException рдорд┐рд▓реЗрдЧреА, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдо рд╕рднреА рдХреЛрдб рдХреЛ рдирд▓ рдХреА рд╕рдВрднрд╛рд╡рд┐рдд рдЙрдкрд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╛рд╣рд░ рдирд┐рдХрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рд╣реЛрдВрдЧреЗред рдпрд╣ рдмрд╣реБрдд рдЬрд▓реНрджреА рдердХрд╛рдК рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рд╛ рд╕рдВрд░рдХреНрд╖рдг рд╡рд░реНрдЧ рд╣реЛ рдЬреЛ рдореВрд▓реНрдп рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛ рдФрд░ рдЗрд╕реЗ рд╕рдВрднрд╛рд▓ рдХрд░ / рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдЧрд╛ред
рдпрд╣ рд╕реНрдХреНрд░реАрди рд╢реЙрдЯ LinqPad рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрд╕рд╛рдорд╛рдиреНрдп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдиреЗ рдкрд╣рд▓реЗ LinqPad рдирд╣реАрдВ рджреЗрдЦрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдЖрдкрдХреЛ рдЕрднреА рднреА рдПрдХ рдЕрд▓рдЧ IDE рдореЗрдВ рдПрдХ рд╣реА рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддрд╛ рд╣реИред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ F # рдореЗрдВ рд╕рдорддреБрд▓реНрдп рдХреЛрдб рдХреИрд╕реЗ рджрд┐рдЦреЗрдЧрд╛
let s1 = "Cats" let s1Length = s1.Length; let s2 = None let s2Length = s2.Length; //excplicily string typed None let s3 = Option.None let s3Length = s3.Length;
рдЗрд╕ рдХреЛрдб рдкрд░, рдЖрдкрдХреЛ рддрддреНрдХрд╛рд▓ рд╕рдВрдХрд▓рди рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ s3 рдХреЛ рдПрдХ рдЕрдиреНрдп рдкреНрд░рдХрд╛рд░ рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ "рд▓рдВрдмрд╛рдИ" рд╕рдВрдкрддреНрддрд┐ рдирд╣реАрдВ рд╣реИред
рд╡рд┐рдХрд▓реНрдк рддреБрд▓рдирд╛
рд╡рд┐рдХрд▓реНрдк рдкреНрд░рдХрд╛рд░ рдХреЛ рд╕рдорд╛рди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡реЗ рдПрдХ рд╣реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдХреЗ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рд╣реЛрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдЖрдпреЛрдЬрд┐рдд рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдорд╛рдирддрд╛ рдирд┐рдпрдореЛрдВ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред
рддреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╛рдд рд╕реЗ F # рдореЗрдВ рддрддреНрдХрд╛рд▓ рд╕рдВрдХрд▓рди-рд╕рдордп рддреНрд░реБрдЯрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ
let o1 = Some 1 let o2 = Some "Cats" printfn "o1=o2 : %b" (o1 = o2)

рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛ рдХреЗ рдЕрдиреБрд░реВрдк рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рдХрд╛рд░ рд╕рдорд╛рди рд╣реИрдВ
let o1 = Some "Cats" let o2 = Some "Cats" let o3 = Some "cats" printfn "o1=o2 : %b" (o1 = o2) printfn "o2=o3 : %b" (o2 = o3)
