Skip to content

Commit

Permalink
Updated default number styles for DecimalConverter and DoubleConverte…
Browse files Browse the repository at this point in the history
…r to match MS's recommendations.
  • Loading branch information
JoshClose committed Mar 24, 2020
1 parent 24d8d53 commit e1d3d06
Show file tree
Hide file tree
Showing 28 changed files with 366 additions and 366 deletions.
22 changes: 11 additions & 11 deletions src/CsvHelper/TypeConversion/BooleanConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,43 +19,43 @@ public class BooleanConverter : DefaultTypeConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if( bool.TryParse( text, out var b ) )
if (bool.TryParse(text, out var b))
{
return b;
}

if( short.TryParse( text, out var sh ) )
if (short.TryParse(text, out var sh))
{
if( sh == 0 )
if (sh == 0)
{
return false;
}
if( sh == 1 )
if (sh == 1)
{
return true;
}
}

var t = ( text ?? string.Empty ).Trim();
foreach( var trueValue in memberMapData.TypeConverterOptions.BooleanTrueValues )
var t = (text ?? string.Empty).Trim();
foreach (var trueValue in memberMapData.TypeConverterOptions.BooleanTrueValues)
{
if( memberMapData.TypeConverterOptions.CultureInfo.CompareInfo.Compare( trueValue, t, CompareOptions.IgnoreCase ) == 0 )
if (memberMapData.TypeConverterOptions.CultureInfo.CompareInfo.Compare(trueValue, t, CompareOptions.IgnoreCase) == 0)
{
return true;
}
}

foreach( var falseValue in memberMapData.TypeConverterOptions.BooleanFalseValues )
foreach (var falseValue in memberMapData.TypeConverterOptions.BooleanFalseValues)
{
if( memberMapData.TypeConverterOptions.CultureInfo.CompareInfo.Compare( falseValue, t, CompareOptions.IgnoreCase ) == 0 )
if (memberMapData.TypeConverterOptions.CultureInfo.CompareInfo.Compare(falseValue, t, CompareOptions.IgnoreCase) == 0)
{
return false;
}
}

return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}
}
}
62 changes: 31 additions & 31 deletions src/CsvHelper/TypeConversion/ByteArrayConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,14 +21,14 @@ public class ByteArrayConverter : DefaultTypeConverter
/// Creates a new ByteArrayConverter using the given <see cref="ByteArrayConverterOptions"/>.
/// </summary>
/// <param name="options">The options.</param>
public ByteArrayConverter( ByteArrayConverterOptions options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexInclude0x )
public ByteArrayConverter(ByteArrayConverterOptions options = ByteArrayConverterOptions.Hexadecimal | ByteArrayConverterOptions.HexInclude0x)
{
// Defaults to the literal format used by C# for whole numbers, and SQL Server for binary data.
this.options = options;
ValidateOptions();

HexStringPrefix = ( options & ByteArrayConverterOptions.HexDashes ) == ByteArrayConverterOptions.HexDashes ? "-" : string.Empty;
ByteLength = ( options & ByteArrayConverterOptions.HexDashes ) == ByteArrayConverterOptions.HexDashes ? (byte)3 : (byte)2;
HexStringPrefix = (options & ByteArrayConverterOptions.HexDashes) == ByteArrayConverterOptions.HexDashes ? "-" : string.Empty;
ByteLength = (options & ByteArrayConverterOptions.HexDashes) == ByteArrayConverterOptions.HexDashes ? (byte)3 : (byte)2;
}

/// <summary>
Expand All @@ -38,16 +38,16 @@ public ByteArrayConverter( ByteArrayConverterOptions options = ByteArrayConverte
/// <param name="row">The <see cref="IWriterRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being written.</param>
/// <returns>The string representation of the object.</returns>
public override string ConvertToString( object value, IWriterRow row, MemberMapData memberMapData )
public override string ConvertToString(object value, IWriterRow row, MemberMapData memberMapData)
{
if( value is byte[] byteArray )
if (value is byte[] byteArray)
{
return ( options & ByteArrayConverterOptions.Base64 ) == ByteArrayConverterOptions.Base64
? Convert.ToBase64String( byteArray )
: ByteArrayToHexString( byteArray );
return (options & ByteArrayConverterOptions.Base64) == ByteArrayConverterOptions.Base64
? Convert.ToBase64String(byteArray)
: ByteArrayToHexString(byteArray);
}

return base.ConvertToString( value, row, memberMapData );
return base.ConvertToString(value, row, memberMapData);
}

/// <summary>
Expand All @@ -57,65 +57,65 @@ public override string ConvertToString( object value, IWriterRow row, MemberMapD
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if( text != null )
if (text != null)
{
return ( options & ByteArrayConverterOptions.Base64 ) == ByteArrayConverterOptions.Base64
? Convert.FromBase64String( text )
: HexStringToByteArray( text );
return (options & ByteArrayConverterOptions.Base64) == ByteArrayConverterOptions.Base64
? Convert.FromBase64String(text)
: HexStringToByteArray(text);
}

return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}

private string ByteArrayToHexString( byte[] byteArray )
private string ByteArrayToHexString(byte[] byteArray)
{
var hexString = new StringBuilder();

if( ( options & ByteArrayConverterOptions.HexInclude0x ) == ByteArrayConverterOptions.HexInclude0x )
if ((options & ByteArrayConverterOptions.HexInclude0x) == ByteArrayConverterOptions.HexInclude0x)
{
hexString.Append( "0x" );
hexString.Append("0x");
}

if( byteArray.Length >= 1 )
if (byteArray.Length >= 1)
{
hexString.Append( byteArray[0].ToString( "X2" ) );
hexString.Append(byteArray[0].ToString("X2"));
}

for( var i = 1; i < byteArray.Length; i++ )
for (var i = 1; i < byteArray.Length; i++)
{
hexString.Append( HexStringPrefix + byteArray[i].ToString( "X2" ) );
hexString.Append(HexStringPrefix + byteArray[i].ToString("X2"));
}

return hexString.ToString();
}

private byte[] HexStringToByteArray( string hex )
private byte[] HexStringToByteArray(string hex)
{
var has0x = hex.StartsWith( "0x" );
var has0x = hex.StartsWith("0x");

var length = has0x
? ( hex.Length - 1 ) / ByteLength
var length = has0x
? (hex.Length - 1) / ByteLength
: hex.Length + 1 / ByteLength;
var byteArray = new byte[length];
var has0xOffset = has0x ? 1 : 0;

for( var stringIndex = has0xOffset * 2; stringIndex < hex.Length; stringIndex += ByteLength )
for (var stringIndex = has0xOffset * 2; stringIndex < hex.Length; stringIndex += ByteLength)
{
byteArray[( stringIndex - has0xOffset ) / ByteLength] = Convert.ToByte( hex.Substring( stringIndex, 2 ), 16 );
byteArray[(stringIndex - has0xOffset) / ByteLength] = Convert.ToByte(hex.Substring(stringIndex, 2), 16);
}

return byteArray;
}

private void ValidateOptions()
{
if( ( options & ByteArrayConverterOptions.Base64 ) == ByteArrayConverterOptions.Base64 )
if ((options & ByteArrayConverterOptions.Base64) == ByteArrayConverterOptions.Base64)
{
if( ( options & ( ByteArrayConverterOptions.HexInclude0x | ByteArrayConverterOptions.HexDashes | ByteArrayConverterOptions.Hexadecimal ) ) != ByteArrayConverterOptions.None )
if ((options & (ByteArrayConverterOptions.HexInclude0x | ByteArrayConverterOptions.HexDashes | ByteArrayConverterOptions.Hexadecimal)) != ByteArrayConverterOptions.None)
{
throw new ConfigurationException( $"{nameof( ByteArrayConverter )} must be configured exclusively with HexDecimal options, or exclusively with Base64 options. Was {options.ToString()}" )
throw new ConfigurationException($"{nameof(ByteArrayConverter)} must be configured exclusively with HexDecimal options, or exclusively with Base64 options. Was {options.ToString()}")
{
Data = { { "options", options } }
};
Expand Down
6 changes: 3 additions & 3 deletions src/CsvHelper/TypeConversion/ByteConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ public class ByteConverter : DefaultTypeConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
var numberStyle = memberMapData.TypeConverterOptions.NumberStyle ?? NumberStyles.Integer;

if( byte.TryParse( text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var b ) )
if (byte.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var b))
{
return b;
}

return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}
}
}
8 changes: 4 additions & 4 deletions src/CsvHelper/TypeConversion/CharConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -18,19 +18,19 @@ public class CharConverter : DefaultTypeConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if( text != null && text.Length > 1 )
if (text != null && text.Length > 1)
{
text = text.Trim();
}

if( char.TryParse( text, out var c ) )
if (char.TryParse(text, out var c))
{
return c;
}

return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}
}
}
18 changes: 9 additions & 9 deletions src/CsvHelper/TypeConversion/CollectionGenericConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,25 +21,25 @@ public class CollectionGenericConverter : IEnumerableConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
// Since we're using the MemberType here, this converter can be used for multiple types
// as long as they implement IList.
var list = (IList)ReflectionHelper.CreateInstance( memberMapData.Member.MemberType() );
var list = (IList)ReflectionHelper.CreateInstance(memberMapData.Member.MemberType());
var type = memberMapData.Member.MemberType().GetGenericArguments()[0];

if( memberMapData.IsNameSet || row.Configuration.HasHeaderRecord && !memberMapData.IsIndexSet )
if (memberMapData.IsNameSet || row.Configuration.HasHeaderRecord && !memberMapData.IsIndexSet)
{
// Use the name.
var nameIndex = 0;
while( true )
while (true)
{
if( !row.TryGetField( type, memberMapData.Names.FirstOrDefault(), nameIndex, out var field ) )
if (!row.TryGetField(type, memberMapData.Names.FirstOrDefault(), nameIndex, out var field))
{
break;
}

list.Add( field );
list.Add(field);
nameIndex++;
}
}
Expand All @@ -50,11 +50,11 @@ public override object ConvertFromString( string text, IReaderRow row, MemberMap
? row.Context.Record.Length - 1
: memberMapData.IndexEnd;

for( var i = memberMapData.Index; i <= indexEnd; i++ )
for (var i = memberMapData.Index; i <= indexEnd; i++)
{
var field = row.GetField( type, i );
var field = row.GetField(type, i);

list.Add( field );
list.Add(field);
}
}

Expand Down
12 changes: 6 additions & 6 deletions src/CsvHelper/TypeConversion/DateTimeOffsetConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -20,19 +20,19 @@ public class DateTimeOffsetConverter : DefaultTypeConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if( text == null )
if (text == null)
{
return base.ConvertFromString( null, row, memberMapData );
return base.ConvertFromString(null, row, memberMapData);
}

var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat( typeof( DateTimeFormatInfo ) ) ?? memberMapData.TypeConverterOptions.CultureInfo;
var formatProvider = (IFormatProvider)memberMapData.TypeConverterOptions.CultureInfo.GetFormat(typeof(DateTimeFormatInfo)) ?? memberMapData.TypeConverterOptions.CultureInfo;
var dateTimeStyle = memberMapData.TypeConverterOptions.DateTimeStyle ?? DateTimeStyles.None;

return memberMapData.TypeConverterOptions.Formats == null || memberMapData.TypeConverterOptions.Formats.Length == 0
? DateTimeOffset.Parse( text, formatProvider, dateTimeStyle )
: DateTimeOffset.ParseExact( text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle );
? DateTimeOffset.Parse(text, formatProvider, dateTimeStyle)
: DateTimeOffset.ParseExact(text, memberMapData.TypeConverterOptions.Formats, formatProvider, dateTimeStyle);
}
}
}
8 changes: 4 additions & 4 deletions src/CsvHelper/TypeConversion/DecimalConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,16 @@ public class DecimalConverter : DefaultTypeConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
var numberStyle = memberMapData.TypeConverterOptions.NumberStyle ?? NumberStyles.Float;
var numberStyle = memberMapData.TypeConverterOptions.NumberStyle ?? NumberStyles.Number;

if( decimal.TryParse( text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var d ) )
if (decimal.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var d))
{
return d;
}

return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}
}
}
2 changes: 1 addition & 1 deletion src/CsvHelper/TypeConversion/DoubleConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ public override string ConvertToString(object value, IWriterRow row, MemberMapDa
/// <returns>The object created from the string.</returns>
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
var numberStyle = memberMapData.TypeConverterOptions.NumberStyle ?? NumberStyles.Float;
var numberStyle = memberMapData.TypeConverterOptions.NumberStyle ?? NumberStyles.Float | NumberStyles.AllowThousands;

if (double.TryParse(text, numberStyle, memberMapData.TypeConverterOptions.CultureInfo, out var d))
{
Expand Down
14 changes: 7 additions & 7 deletions src/CsvHelper/TypeConversion/EnumConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@ public class EnumConverter : DefaultTypeConverter
/// Creates a new <see cref="EnumConverter"/> for the given <see cref="Enum"/> <see cref="System.Type"/>.
/// </summary>
/// <param name="type">The type of the Enum.</param>
public EnumConverter( Type type )
public EnumConverter(Type type)
{
var isAssignableFrom = typeof( Enum ).GetTypeInfo().IsAssignableFrom( type.GetTypeInfo() );
if( !typeof( Enum ).IsAssignableFrom( type ) )
var isAssignableFrom = typeof(Enum).GetTypeInfo().IsAssignableFrom(type.GetTypeInfo());
if (!typeof(Enum).IsAssignableFrom(type))
{
throw new ArgumentException( $"'{type.FullName}' is not an Enum." );
throw new ArgumentException($"'{type.FullName}' is not an Enum.");
}

this.type = type;
Expand All @@ -37,15 +37,15 @@ public EnumConverter( Type type )
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
try
{
return Enum.Parse( type, text, true );
return Enum.Parse(type, text, true);
}
catch
{
return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}
}
}
Expand Down
8 changes: 4 additions & 4 deletions src/CsvHelper/TypeConversion/GuidConverter.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,14 @@ public class GuidConverter : DefaultTypeConverter
/// <param name="row">The <see cref="IReaderRow"/> for the current record.</param>
/// <param name="memberMapData">The <see cref="MemberMapData"/> for the member being created.</param>
/// <returns>The object created from the string.</returns>
public override object ConvertFromString( string text, IReaderRow row, MemberMapData memberMapData )
public override object ConvertFromString(string text, IReaderRow row, MemberMapData memberMapData)
{
if( text == null )
if (text == null)
{
return base.ConvertFromString( text, row, memberMapData );
return base.ConvertFromString(text, row, memberMapData);
}

return new Guid( text );
return new Guid(text);
}
}
}
Loading

0 comments on commit e1d3d06

Please sign in to comment.