From 350c3ab95627f58ff5e13c3227111abe11be27dd Mon Sep 17 00:00:00 2001
From: albert-du <52804499+albert-du@users.noreply.github.com>
Date: Thu, 24 Feb 2022 20:28:57 -0800
Subject: [PATCH] IConvertible F# snippet
---
.../System/IConvertible/Overview/fs.fsproj | 10 +++
.../IConvertible/Overview/iconvertible.fs | 77 +++++++++++++++++++
xml/System/IConvertible.xml | 1 +
3 files changed, 88 insertions(+)
create mode 100644 snippets/fsharp/System/IConvertible/Overview/fs.fsproj
create mode 100644 snippets/fsharp/System/IConvertible/Overview/iconvertible.fs
diff --git a/snippets/fsharp/System/IConvertible/Overview/fs.fsproj b/snippets/fsharp/System/IConvertible/Overview/fs.fsproj
new file mode 100644
index 00000000000..d6c57532356
--- /dev/null
+++ b/snippets/fsharp/System/IConvertible/Overview/fs.fsproj
@@ -0,0 +1,10 @@
+
+
+ Exe
+ net6.0
+
+
+
+
+
+
\ No newline at end of file
diff --git a/snippets/fsharp/System/IConvertible/Overview/iconvertible.fs b/snippets/fsharp/System/IConvertible/Overview/iconvertible.fs
new file mode 100644
index 00000000000..fb39fe4360f
--- /dev/null
+++ b/snippets/fsharp/System/IConvertible/Overview/iconvertible.fs
@@ -0,0 +1,77 @@
+//
+open System
+
+/// Class that implements IConvertible
+type Complex(x, y) =
+ member _.GetDoubleValue() =
+ sqrt (x * x + y * y)
+
+ interface IConvertible with
+ member _.GetTypeCode() =
+ TypeCode.Object
+
+ member _.ToBoolean(provider: IFormatProvider) =
+ (x <> 0.) || (y <> 0.)
+
+ member this.ToByte(provider: IFormatProvider) =
+ Convert.ToByte(this.GetDoubleValue())
+
+ member this.ToChar(provider: IFormatProvider) =
+ Convert.ToChar(this.GetDoubleValue())
+
+ member this.ToDateTime(provider: IFormatProvider) =
+ Convert.ToDateTime(this.GetDoubleValue())
+
+ member this.ToDecimal(provider: IFormatProvider) =
+ Convert.ToDecimal(this.GetDoubleValue())
+
+ member this.ToDouble(provider: IFormatProvider) =
+ this.GetDoubleValue()
+
+ member this.ToInt16(provider: IFormatProvider) =
+ Convert.ToInt16(this.GetDoubleValue())
+
+ member this.ToInt32(provider: IFormatProvider) =
+ Convert.ToInt32(this.GetDoubleValue())
+
+ member this.ToInt64(provider: IFormatProvider) =
+ Convert.ToInt64(this.GetDoubleValue())
+
+ member this.ToSByte(provider: IFormatProvider) =
+ Convert.ToSByte(this.GetDoubleValue())
+
+ member this.ToSingle(provider: IFormatProvider) =
+ Convert.ToSingle(this.GetDoubleValue())
+
+ member _.ToString(provider: IFormatProvider) =
+ $"({x}, {y})"
+
+ member this.ToType(conversionType: Type, provider: IFormatProvider) =
+ Convert.ChangeType(this.GetDoubleValue(), conversionType)
+
+ member this.ToUInt16(provider: IFormatProvider) =
+ Convert.ToUInt16(this.GetDoubleValue())
+
+ member this.ToUInt32(provider: IFormatProvider) =
+ Convert.ToUInt32(this.GetDoubleValue())
+
+ member this.ToUInt64(provider: IFormatProvider) =
+ Convert.ToUInt64(this.GetDoubleValue())
+
+let writeObjectInfo testObject =
+ let typeCode = Type.GetTypeCode(testObject.GetType())
+ match typeCode with
+ | TypeCode.Boolean ->
+ printfn $"Boolean: {testObject}"
+ | TypeCode.Double ->
+ printfn $"Boolean: {testObject}"
+ | _ ->
+ printfn $"{typeCode}: {testObject}"
+
+let testComplex = Complex(4, 7)
+
+writeObjectInfo testComplex
+writeObjectInfo (Convert.ToBoolean testComplex)
+writeObjectInfo (Convert.ToDecimal testComplex)
+writeObjectInfo (Convert.ToString testComplex)
+//
\ No newline at end of file
diff --git a/xml/System/IConvertible.xml b/xml/System/IConvertible.xml
index ef0b3b79188..0a580dbf50b 100644
--- a/xml/System/IConvertible.xml
+++ b/xml/System/IConvertible.xml
@@ -64,6 +64,7 @@
:::code language="cpp" source="~/snippets/cpp/VS_Snippets_CLR_System/system.IConvertible/CPP/iconvertible.cpp" id="Snippet1":::
:::code language="csharp" source="~/snippets/csharp/System/IConvertible/Overview/iconvertible.cs" interactive="try-dotnet" id="Snippet1":::
+ :::code language="fsharp" source="~/snippets/fsharp/System/IConvertible/Overview/iconvertible.fs" id="Snippet1":::
:::code language="vb" source="~/snippets/visualbasic/VS_Snippets_CLR_System/system.IConvertible/VB/iconvertible.vb" id="Snippet1":::
]]>