aboutsummaryrefslogtreecommitdiff
path: root/src/WixToolset.Data/IntermediateFieldValueExtensions.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/WixToolset.Data/IntermediateFieldValueExtensions.cs')
-rw-r--r--src/WixToolset.Data/IntermediateFieldValueExtensions.cs76
1 files changed, 71 insertions, 5 deletions
diff --git a/src/WixToolset.Data/IntermediateFieldValueExtensions.cs b/src/WixToolset.Data/IntermediateFieldValueExtensions.cs
index bc106d4b..9a4237d8 100644
--- a/src/WixToolset.Data/IntermediateFieldValueExtensions.cs
+++ b/src/WixToolset.Data/IntermediateFieldValueExtensions.cs
@@ -2,26 +2,71 @@
2 2
3namespace WixToolset.Data 3namespace WixToolset.Data
4{ 4{
5 using System;
6
5 public static class IntermediateFieldValueExtensions 7 public static class IntermediateFieldValueExtensions
6 { 8 {
7 public static bool AsBool(this IntermediateFieldValue value) 9 public static bool AsBool(this IntermediateFieldValue value)
8 { 10 {
9 return value?.Data == null ? false : (bool)value.Data; 11 var result = value.AsNullableBool();
12 return result.HasValue && result.Value;
10 } 13 }
11 14
12 public static bool? AsNullableBool(this IntermediateFieldValue value) 15 public static bool? AsNullableBool(this IntermediateFieldValue value)
13 { 16 {
14 return (bool?)value?.Data; 17 if (value?.Data == null)
18 {
19 return null;
20 }
21 else if (value.Data is bool b)
22 {
23 return b;
24 }
25 else if (value.Data is int n)
26 {
27 return n != 0;
28 }
29 else if (value.Data is string s)
30 {
31 if (s.Equals("yes", StringComparison.OrdinalIgnoreCase) || s.Equals("true", StringComparison.OrdinalIgnoreCase))
32 {
33 return true;
34 }
35 else if (s.Equals("no", StringComparison.OrdinalIgnoreCase) || s.Equals("false", StringComparison.OrdinalIgnoreCase))
36 {
37 return false;
38 }
39 }
40
41 return (bool)value.Data;
15 } 42 }
16 43
17 public static int AsNumber(this IntermediateFieldValue value) 44 public static int AsNumber(this IntermediateFieldValue value)
18 { 45 {
19 return value?.Data == null ? 0 : (int)value.Data; 46 var result = value.AsNullableNumber();
47 return result ?? 0;
20 } 48 }
21 49
22 public static int? AsNullableNumber(this IntermediateFieldValue value) 50 public static int? AsNullableNumber(this IntermediateFieldValue value)
23 { 51 {
24 return (int?)value?.Data; 52 if (value?.Data == null)
53 {
54 return null;
55 }
56 else if (value.Data is int n)
57 {
58 return n;
59 }
60 else if (value.Data is bool b)
61 {
62 return b ? 1 : 0;
63 }
64 else if (value.Data is string s)
65 {
66 return Convert.ToInt32(s);
67 }
68
69 return (int)value.Data;
25 } 70 }
26 71
27 public static IntermediateFieldPathValue AsPath(this IntermediateFieldValue value) 72 public static IntermediateFieldPathValue AsPath(this IntermediateFieldValue value)
@@ -31,7 +76,28 @@ namespace WixToolset.Data
31 76
32 public static string AsString(this IntermediateFieldValue value) 77 public static string AsString(this IntermediateFieldValue value)
33 { 78 {
34 return (string)value?.Data; 79 if (value?.Data == null)
80 {
81 return null;
82 }
83 else if (value.Data is string s)
84 {
85 return s;
86 }
87 else if (value.Data is int n)
88 {
89 return n.ToString();
90 }
91 else if (value.Data is bool b)
92 {
93 return b ? "true" : "false";
94 }
95 else if (value.Data is IntermediateFieldPathValue p)
96 {
97 return p.Path;
98 }
99
100 return (string)value.Data;
35 } 101 }
36 } 102 }
37} 103}