@@ -2,12 +2,13 @@ function GenerateUnitClassSourceCode($unitClass)
2
2
{
3
3
$className = $unitClass.Name ;
4
4
$units = $unitClass.Units ;
5
+ $baseType = $unitClass.BaseType ;
5
6
$baseUnit = $units | where { $_.SingularName -eq $unitClass.BaseUnit }
6
7
$baseUnitSingularName = $baseUnit.SingularName
7
8
$baseUnitPluralName = $baseUnit.PluralName
8
- $baseUnitPluralNameLower = $baseUnitPluralName.ToLowerInvariant ()
9
- $baseUnitFieldName = $baseUnitPluralName ;
9
+ $baseUnitPluralNameLower = $baseUnitPluralName.ToLowerInvariant ()
10
10
$unitEnumName = " $className " + " Unit" ;
11
+ $baseUnitFieldName = " _" + [Char ]::ToLowerInvariant($baseUnitPluralName [0 ]) + $baseUnitPluralName.Substring (1 );
11
12
12
13
@"
13
14
// Copyright © 2007 by Initial Force AS. All rights reserved.
@@ -50,20 +51,16 @@ namespace UnitsNet
50
51
/// <summary>
51
52
/// Base unit of $className .
52
53
/// </summary>
53
- [UsedImplicitly] public readonly double $baseUnitPluralName ;
54
+ private readonly $baseType $baseUnitFieldName ;
54
55
55
- public $className (double $baseUnitPluralNameLower ) : this()
56
+ public $className ($baseType $baseUnitPluralNameLower ) : this()
56
57
{
57
- $baseUnitPluralName = $baseUnitPluralNameLower ;
58
+ $baseUnitFieldName = $baseUnitPluralNameLower ;
58
59
}
59
60
60
61
#region Properties
61
62
"@ ; foreach ($unit in $units ) {
62
- # Base unit already has a public readonly field
63
- if ($unit.SingularName -eq $baseUnitSingularName ) { continue ; }
64
-
65
- $propertyName = $unit.PluralName ;
66
- $baseUnitPluralNameLower = $baseUnitPluralName.ToLowerInvariant ();
63
+ $propertyName = $unit.PluralName ;
67
64
$fromBaseToUnitFunc = $unit.FromBaseToUnitFunc.Replace (" x" , $baseUnitFieldName );@"
68
65
69
66
/// <summary>
@@ -73,7 +70,7 @@ namespace UnitsNet
73
70
{
74
71
get { return $fromBaseToUnitFunc ; }
75
72
}
76
- "@ ; }@"
73
+ "@ ; }@"
77
74
78
75
#endregion
79
76
@@ -85,7 +82,7 @@ namespace UnitsNet
85
82
}
86
83
87
84
"@ ; foreach ($unit in $units ) {
88
- $valueParamName = $unit.PluralName.ToLowerInvariant ();
85
+ $valueParamName = $unit.PluralName.ToLowerInvariant ();
89
86
$func = $unit.FromUnitToBaseFunc.Replace (" x" , $valueParamName );@"
90
87
/// <summary>
91
88
/// Get $className from $ ( $unit.PluralName ) .
@@ -95,7 +92,7 @@ namespace UnitsNet
95
92
return new $className ($func );
96
93
}
97
94
98
- "@ ; }@"
95
+ "@ ; }@"
99
96
100
97
/// <summary>
101
98
/// Dynamically convert from value and unit enum <see cref="$unitEnumName " /> to <see cref="$className " />.
@@ -110,7 +107,7 @@ namespace UnitsNet
110
107
"@ ; foreach ($unit in $units ) {@"
111
108
case $unitEnumName .$ ( $unit.SingularName ) :
112
109
return From$ ( $unit.PluralName ) (value);
113
- "@ ; }@"
110
+ "@ ; }@"
114
111
115
112
default:
116
113
throw new NotImplementedException("fromUnit: " + fromUnit);
@@ -135,37 +132,37 @@ namespace UnitsNet
135
132
136
133
public static $className operator -($className right)
137
134
{
138
- return new $className (-right.$baseUnitPluralName );
135
+ return new $className (-right.$baseUnitFieldName );
139
136
}
140
137
141
138
public static $className operator +($className left, $className right)
142
139
{
143
- return new $className (left.$baseUnitPluralName + right.$baseUnitPluralName );
140
+ return new $className (left.$baseUnitFieldName + right.$baseUnitFieldName );
144
141
}
145
142
146
143
public static $className operator -($className left, $className right)
147
144
{
148
- return new $className (left.$baseUnitPluralName - right.$baseUnitPluralName );
145
+ return new $className (left.$baseUnitFieldName - right.$baseUnitFieldName );
149
146
}
150
147
151
- public static $className operator *(double left, $className right)
148
+ public static $className operator *($baseType left, $className right)
152
149
{
153
- return new $className (left*right.$baseUnitPluralName );
150
+ return new $className (left*right.$baseUnitFieldName );
154
151
}
155
152
156
153
public static $className operator *($className left, double right)
157
154
{
158
- return new $className (left.$baseUnitPluralName * right);
155
+ return new $className (left.$baseUnitFieldName *( $baseType ) right);
159
156
}
160
157
161
158
public static $className operator /($className left, double right)
162
159
{
163
- return new $className (left.$baseUnitPluralName / right);
160
+ return new $className (left.$baseUnitFieldName /( $baseType ) right);
164
161
}
165
162
166
163
public static double operator /($className left, $className right)
167
164
{
168
- return left.$baseUnitPluralName /right.$baseUnitPluralName ;
165
+ return Convert.ToDouble( left.$baseUnitFieldName /right.$baseUnitFieldName ) ;
169
166
}
170
167
171
168
#endregion
@@ -181,39 +178,39 @@ namespace UnitsNet
181
178
182
179
public int CompareTo($className other)
183
180
{
184
- return $baseUnitPluralName .CompareTo(other.$baseUnitPluralName );
181
+ return $baseUnitFieldName .CompareTo(other.$baseUnitFieldName );
185
182
}
186
183
187
184
public static bool operator <=($className left, $className right)
188
185
{
189
- return left.$baseUnitPluralName <= right.$baseUnitPluralName ;
186
+ return left.$baseUnitFieldName <= right.$baseUnitFieldName ;
190
187
}
191
188
192
189
public static bool operator >=($className left, $className right)
193
190
{
194
- return left.$baseUnitPluralName >= right.$baseUnitPluralName ;
191
+ return left.$baseUnitFieldName >= right.$baseUnitFieldName ;
195
192
}
196
193
197
194
public static bool operator <($className left, $className right)
198
195
{
199
- return left.$baseUnitPluralName < right.$baseUnitPluralName ;
196
+ return left.$baseUnitFieldName < right.$baseUnitFieldName ;
200
197
}
201
198
202
199
public static bool operator >($className left, $className right)
203
200
{
204
- return left.$baseUnitPluralName > right.$baseUnitPluralName ;
201
+ return left.$baseUnitFieldName > right.$baseUnitFieldName ;
205
202
}
206
203
207
204
public static bool operator ==($className left, $className right)
208
205
{
209
206
// ReSharper disable once CompareOfFloatsByEqualityOperator
210
- return left.$baseUnitPluralName == right.$baseUnitPluralName ;
207
+ return left.$baseUnitFieldName == right.$baseUnitFieldName ;
211
208
}
212
209
213
210
public static bool operator !=($className left, $className right)
214
211
{
215
212
// ReSharper disable once CompareOfFloatsByEqualityOperator
216
- return left.$baseUnitPluralName != right.$baseUnitPluralName ;
213
+ return left.$baseUnitFieldName != right.$baseUnitFieldName ;
217
214
}
218
215
219
216
public override bool Equals(object obj)
@@ -223,12 +220,12 @@ namespace UnitsNet
223
220
return false;
224
221
}
225
222
226
- return $baseUnitPluralName .Equals((($className ) obj).$baseUnitPluralName );
223
+ return $baseUnitFieldName .Equals((($className ) obj).$baseUnitFieldName );
227
224
}
228
225
229
226
public override int GetHashCode()
230
227
{
231
- return $baseUnitPluralName .GetHashCode();
228
+ return $baseUnitFieldName .GetHashCode();
232
229
}
233
230
234
231
#endregion
@@ -244,7 +241,7 @@ namespace UnitsNet
244
241
{
245
242
switch (unit)
246
243
{
247
- "@ ; foreach ($unit in $units ) {@"
244
+ "@ ; foreach ($unit in $units ) {@"
248
245
case $unitEnumName .$ ( $unit.SingularName ) :
249
246
return $ ( $unit.PluralName ) ;
250
247
"@ ; }@"
0 commit comments