Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitca3bee0

Browse files
dsymelatkin
authored andcommitted
add tryUnbox, isNull, Option.toObj, Option.ofObj, Option.toNullable, Option.ofNullable
commit 49a1d5f2abc1fbfaab6ea583d632777a62a766afAuthor: latkin <latkin@microsoft.com>Date: Fri Dec 12 14:38:42 2014 -0800 Moving Option tests to proper filecommit de9563b2bdc1b012b1cb8fc367f9440af06b6503Author: latkin <latkin@microsoft.com>Date: Fri Dec 12 14:31:34 2014 -0800 Updating surface area testscommit d90c61fa672149f717ce94125de7cfd725d2f9c1Author: latkin <latkin@microsoft.com>Date: Fri Dec 12 14:05:33 2014 -0800 Fixing doc commentcommit 55bf33dbdd2742a5b3f27a242d2e4a60cfc6af68Author: Don Syme <dsyme@microsoft.com>Date: Mon Nov 10 17:20:26 2014 +0000 add tryUnbox, isNull, Option.toObj, Option.ofObj, Option.toNullable, Option.ofNullable
1 parente7f029f commitca3bee0

File tree

8 files changed

+124
-4
lines changed

8 files changed

+124
-4
lines changed

‎src/fsharp/FSharp.Core.Unittests/FSharp.Core/Microsoft.FSharp.Core/OptionModule.fs‎

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,4 +97,28 @@ type OptionModule() =
9797

9898
letexpected= None
9999
Assert.AreEqual(expected, actual)
100-
["";"";"Baz Quux";"Corge grault"]|> List.iter test
100+
["";"";"Baz Quux";"Corge grault"]|> List.iter test
101+
102+
[<Test>]
103+
memberthis.OfToNullable()=
104+
Assert.IsTrue( Option.ofNullable(System.Nullable<int>())= None)
105+
Assert.IsTrue( Option.ofNullable(System.Nullable<int>(3))= Some3)
106+
107+
Assert.IsTrue( Option.toNullable(None: int option)= System.Nullable<int>())
108+
Assert.IsTrue( Option.toNullable(None: System.DateTime option)= System.Nullable())
109+
Assert.IsTrue( Option.toNullable(Some3)= System.Nullable(3))
110+
111+
[<Test>]
112+
memberthis.OfToObj()=
113+
Assert.IsTrue( Option.toObj(Some"3")="3")
114+
Assert.IsTrue( Option.toObj(Some"")="")
115+
Assert.IsTrue( Option.toObj(Somenull)=null)
116+
Assert.IsTrue( Option.toObj None=null)
117+
118+
Assert.IsTrue( Option.ofObj"3"= Some"3")
119+
Assert.IsTrue( Option.ofObj""= Some"")
120+
Assert.IsTrue( Option.ofObj[|""|]= Some[|""|])
121+
Assert.IsTrue( Option.ofObj(null: string array)= None)
122+
Assert.IsTrue( Option.ofObj<string>null= None)
123+
Assert.IsTrue( Option.ofObj<string[]>null= None)
124+
Assert.IsTrue( Option.ofObj<int[]>null= None)

‎src/fsharp/FSharp.Core.Unittests/FSharp.Core/PrimTypes.fs‎

Lines changed: 28 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -693,5 +693,31 @@ type MiscStuff() =
693693
Assert.IsTrue(1=!x)
694694

695695

696-
697-
696+
697+
[<TestFixture>]
698+
typeUnboxAndOptionStuff()=
699+
[<Test>]
700+
memberthis.TryUnbox()=
701+
Assert.IsTrue( tryUnbox(box([]: int list))= Some([]: int list))
702+
Assert.IsTrue( tryUnbox(box([1]: int list))= Some([1]: int list))
703+
Assert.IsTrue( tryUnbox(box([]: string list))=(None: int list option))// Option uses 'null' as representation
704+
Assert.IsTrue( tryUnbox<int list>(box([]: string list))= None)
705+
Assert.IsTrue( tryUnbox(box(None: int option))= Some(None: int option))
706+
Assert.IsTrue( tryUnbox(box(None: string option))= Some(None: string option))
707+
Assert.IsTrue( tryUnbox(box(None: string option))= Some(None: int option))// Option uses 'null' as representation
708+
Assert.IsTrue( tryUnbox(box"")= Some"")
709+
Assert.IsTrue( tryUnbox<int option>(boxnull)= Some None)// Option uses 'null' as representation
710+
Assert.IsTrue( tryUnbox<int list>(boxnull)= None)
711+
Assert.IsTrue( tryUnbox<int>(boxnull)= None)
712+
Assert.IsTrue( tryUnbox<int>(box"1")= None)
713+
Assert.IsTrue( tryUnbox<int>(box1)= Some1)
714+
Assert.IsTrue( tryUnbox<string>(box"")= Some"")
715+
Assert.IsTrue( tryUnbox<string>(box1)= None)
716+
717+
memberthis.IsNull()=
718+
Assert.IsTrue( isNull(null: string))
719+
Assert.IsTrue( isNull(null: string[]))
720+
Assert.IsTrue( isNull(null: int[]))
721+
Assert.IsTrue(not(isNull[||]))
722+
Assert.IsTrue(not(isNull""))
723+
Assert.IsTrue(not(isNull"1"))

‎src/fsharp/FSharp.Core.Unittests/SurfaceArea.4.0.fs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2520,6 +2520,7 @@ Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType()
25202520
Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]()
25212521
Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object)
25222522
Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object)
2523+
Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T)
25232524
Microsoft.FSharp.Core.Operators: Boolean Not(Boolean)
25242525
Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T)
25252526
Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T)
@@ -2549,6 +2550,7 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op
25492550
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2])
25502551
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3])
25512552
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception)
2553+
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object)
25522554
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T)
25532555
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked
25542556
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics
@@ -2694,9 +2696,13 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T]
26942696
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T])
26952697
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T])
26962698
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T])
2699+
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T])
2700+
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T)
2701+
Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T])
26972702
Microsoft.FSharp.Core.OptionModule: System.String ToString()
26982703
Microsoft.FSharp.Core.OptionModule: System.Type GetType()
26992704
Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T])
2705+
Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T])
27002706
Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState)
27012707
Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T])
27022708
Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T])

‎src/fsharp/FSharp.Core.Unittests/SurfaceArea.Portable.fs‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2507,6 +2507,7 @@ Microsoft.FSharp.Core.Operators+Unchecked: System.Type GetType()
25072507
Microsoft.FSharp.Core.Operators+Unchecked: T DefaultOf[T]()
25082508
Microsoft.FSharp.Core.Operators+Unchecked: T Unbox[T](System.Object)
25092509
Microsoft.FSharp.Core.Operators: Boolean Equals(System.Object)
2510+
Microsoft.FSharp.Core.Operators: Boolean IsNull[T](T)
25102511
Microsoft.FSharp.Core.Operators: Boolean Not(Boolean)
25112512
Microsoft.FSharp.Core.Operators: Boolean op_Equality[T](T, T)
25122513
Microsoft.FSharp.Core.Operators: Boolean op_GreaterThanOrEqual[T](T, T)
@@ -2536,6 +2537,7 @@ Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Collections.FSharpList`1[T] op
25362537
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeLeft[T2,T3,T1](Microsoft.FSharp.Core.FSharpFunc`2[T2,T3], Microsoft.FSharp.Core.FSharpFunc`2[T1,T2])
25372538
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpFunc`2[T1,T3] op_ComposeRight[T1,T2,T3](Microsoft.FSharp.Core.FSharpFunc`2[T1,T2], Microsoft.FSharp.Core.FSharpFunc`2[T2,T3])
25382539
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[System.String] FailurePattern(System.Exception)
2540+
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpOption`1[T] TryUnbox[T](System.Object)
25392541
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.FSharpRef`1[T] Ref[T](T)
25402542
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+Checked
25412543
Microsoft.FSharp.Core.Operators: Microsoft.FSharp.Core.Operators+OperatorIntrinsics
@@ -2676,9 +2678,13 @@ Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Collections.FSharpList`1[T]
26762678
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Bind[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpOption`1[TResult]], Microsoft.FSharp.Core.FSharpOption`1[T])
26772679
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[TResult] Map[T,TResult](Microsoft.FSharp.Core.FSharpFunc`2[T,TResult], Microsoft.FSharp.Core.FSharpOption`1[T])
26782680
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] Filter[T](Microsoft.FSharp.Core.FSharpFunc`2[T,System.Boolean], Microsoft.FSharp.Core.FSharpOption`1[T])
2681+
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfNullable[T](System.Nullable`1[T])
2682+
Microsoft.FSharp.Core.OptionModule: Microsoft.FSharp.Core.FSharpOption`1[T] OfObj[T](T)
2683+
Microsoft.FSharp.Core.OptionModule: System.Nullable`1[T] ToNullable[T](Microsoft.FSharp.Core.FSharpOption`1[T])
26792684
Microsoft.FSharp.Core.OptionModule: System.String ToString()
26802685
Microsoft.FSharp.Core.OptionModule: System.Type GetType()
26812686
Microsoft.FSharp.Core.OptionModule: T GetValue[T](Microsoft.FSharp.Core.FSharpOption`1[T])
2687+
Microsoft.FSharp.Core.OptionModule: T ToObj[T](Microsoft.FSharp.Core.FSharpOption`1[T])
26822688
Microsoft.FSharp.Core.OptionModule: TState FoldBack[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[T,Microsoft.FSharp.Core.FSharpFunc`2[TState,TState]], Microsoft.FSharp.Core.FSharpOption`1[T], TState)
26832689
Microsoft.FSharp.Core.OptionModule: TState Fold[T,TState](Microsoft.FSharp.Core.FSharpFunc`2[TState,Microsoft.FSharp.Core.FSharpFunc`2[T,TState]], TState, Microsoft.FSharp.Core.FSharpOption`1[T])
26842690
Microsoft.FSharp.Core.OptionModule: T[] ToArray[T](Microsoft.FSharp.Core.FSharpOption`1[T])

‎src/fsharp/FSharp.Core/option.fs‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,3 +53,14 @@ namespace Microsoft.FSharp.Core
5353
[<CompiledName("ToList")>]
5454
lettoList option=match optionwith None->[]| Some x->[ x]
5555

56+
[<CompiledName("ToNullable")>]
57+
lettoNullable option=match optionwith None-> System.Nullable()| Some v-> System.Nullable(v)
58+
59+
[<CompiledName("OfNullable")>]
60+
letofNullable(value:System.Nullable<'T>)=if value.HasValuethen Some value.Valueelse None
61+
62+
[<CompiledName("OfObj")>]
63+
letofObj value=match valuewithnull-> None|_-> Some value
64+
65+
[<CompiledName("ToObj")>]
66+
lettoObj value=match valuewith None->null| Some x-> x

‎src/fsharp/FSharp.Core/option.fsi‎

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,3 +114,26 @@ namespace Microsoft.FSharp.Core
114114
valtoList:option:'T option->'T list
115115

116116

117+
/// <summary>Convert the option to a Nullable value.</summary>
118+
/// <param name="option">The input option.</param>
119+
/// <returns>The result value.</returns>
120+
[<CompiledName("ToNullable")>]
121+
valtoNullable:option:'T option->Nullable<'T>
122+
123+
/// <summary>Convert a Nullable value to an option.</summary>
124+
/// <param name="value">The input nullable value.</param>
125+
/// <returns>The result option.</returns>
126+
[<CompiledName("OfNullable")>]
127+
valofNullable:value:Nullable<'T>->'T option
128+
129+
/// <summary>Convert a potentially null value to an option.</summary>
130+
/// <param name="value">The input value.</param>
131+
/// <returns>The result option.</returns>
132+
[<CompiledName("OfObj")>]
133+
valofObj:value:'T->'T option when 'T:null
134+
135+
/// <summary>Convert an option to a potentially null value.</summary>
136+
/// <param name="value">The input value.</param>
137+
/// <returns>The result value, which is null if the input was None.</returns>
138+
[<CompiledName("ToObj")>]
139+
valtoObj:value:'T option->'T when 'T:null

‎src/fsharp/FSharp.Core/prim-types.fs‎

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3772,6 +3772,18 @@ namespace Microsoft.FSharp.Core
37723772
[<CompiledName("Box")>]
37733773
let inlinebox(x:'T)=(#"box !0" type('T) x: obj #)
37743774

3775+
[<CompiledName("TryUnbox")>]
3776+
let inlinetryUnbox(x:obj)=
3777+
match xwith
3778+
|:? 'Tas v-> Some v
3779+
|_-> None
3780+
3781+
[<CompiledName("IsNull")>]
3782+
let inlineisNull(value:'T)=
3783+
match valuewith
3784+
|null->true
3785+
|_->false
3786+
37753787
[<CompiledName("Raise")>]
37763788
letraise(e:exn)=(#"throw" e: 'T #)
37773789

‎src/fsharp/FSharp.Core/prim-types.fsi‎

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2104,7 +2104,7 @@ namespace Microsoft.FSharp.Core
21042104
[<CompiledName("Ignore")>]
21052105
val inlineignore:value:'T->unit
21062106

2107-
/// <summary>Unboxes a strongly typed value. This is the inverse of <c>box</c>, unbox&lt;t&gt;(box&lt;t&gt; a) equals a.</summary>
2107+
/// <summary>Unboxes a strongly typed value.</summary>
21082108
/// <param name="value">The boxed value.</param>
21092109
/// <returns>The unboxed result.</returns>
21102110
[<CompiledName("Unbox")>]
@@ -2116,6 +2116,18 @@ namespace Microsoft.FSharp.Core
21162116
[<CompiledName("Box")>]
21172117
val inlinebox:value:'T->obj
21182118

2119+
/// <summary>Try to unbox a strongly typed value.</summary>
2120+
/// <param name="value">The boxed value.</param>
2121+
/// <returns>The unboxed result as an option.</returns>
2122+
[<CompiledName("TryUnbox")>]
2123+
val inlinetryUnbox:value:obj->'T option
2124+
2125+
/// <summary>Determines whether the given value is null.</summary>
2126+
/// <param name="value">The value to check.</param>
2127+
/// <returns>True when value is null, false otherwise.</returns>
2128+
[<CompiledName("IsNull")>]
2129+
val inlineisNull:value:'T->bool when 'T:null
2130+
21192131
/// <summary>Throw a <c>System.Exception</c> exception.</summary>
21202132
/// <param name="message">The exception message.</param>
21212133
/// <returns>The result value.</returns>

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp