Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions CsvHelper.FastDynamic.Tests/TestData.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ public static class TestData

public static readonly string CsvContentWithMissingHeader = "Id,Name\r\n1,kazuakix\r\n2,daruyanagi,Ehime\r\n3,buchizo\r\n";

public static readonly IReadOnlyList<IDictionary<string, string>> CsvRecords = new[]
{
new Dictionary<string, string> { { "Id", "1" }, { "Name", "kazuakix" }, { "Location", "Wakayama" } },
new Dictionary<string, string> { { "Id", "2" }, { "Name", "daruyanagi" }, { "Location", "Ehime" } },
new Dictionary<string, string> { { "Id", "3" }, { "Name", "buchizo" }, { "Location", "Osaka" } }
};
public static readonly IReadOnlyList<IDictionary<string, string>> CsvRecords =
[
new Dictionary<string, string> { ["Id"] = "1", ["Name"] = "kazuakix", ["Location"] = "Wakayama" },
new Dictionary<string, string> { ["Id"] = "2", ["Name"] = "daruyanagi", ["Location"] = "Ehime" },
new Dictionary<string, string> { ["Id"] = "3", ["Name"] = "buchizo", ["Location"] = "Osaka" }
];

public static readonly IReadOnlyList<object> CsvAnonymousRecords = new[]
{
public static readonly IReadOnlyList<object> CsvAnonymousRecords =
[
new { Id = 1, Name = "kazuakix", Location = "Wakayama" },
new { Id = 2, Name = "daruyanagi", Location = "Ehime" },
new { Id = 3, Name = "buchizo", Location = "Osaka" }
};
];
}
2 changes: 1 addition & 1 deletion CsvHelper.FastDynamic/CsvHeader.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ public CsvHeader(string[] fieldNames)
{
_fieldNames = fieldNames ?? throw new ArgumentNullException(nameof(fieldNames));

_fieldNameLookup = new Dictionary<string, int>(fieldNames.Length, StringComparer.Ordinal);
_fieldNameLookup = new(fieldNames.Length, StringComparer.Ordinal);

for (var i = fieldNames.Length - 1; i >= 0; i--)
{
Expand Down
2 changes: 1 addition & 1 deletion CsvHelper.FastDynamic/CsvHelper.FastDynamic.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<LangVersion>latest</LangVersion>
<LangVersion>12.0</LangVersion>
</PropertyGroup>
Comment thread
shibayan marked this conversation as resolved.

<PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion CsvHelper.FastDynamic/CsvReaderExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,7 +64,7 @@ public static IEnumerable<dynamic> EnumerateDynamicRecords(this CsvReader csvRea

public static async Task<IReadOnlyList<dynamic>> GetDynamicRecordsAsync(this CsvReader csvReader)
{
var records = new List<dynamic>();
List<dynamic> records = [];

await foreach (var record in csvReader.EnumerateDynamicRecordsAsync())
{
Expand Down
29 changes: 6 additions & 23 deletions CsvHelper.FastDynamic/CsvRecordMetaObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ namespace CsvHelper.FastDynamic;
// Thanks, from https://github.com/StackExchange/Dapper/blob/master/Dapper/SqlMapper.DapperRowMetaObject.cs
internal sealed class CsvRecordMetaObject : DynamicMetaObject
{
private static readonly string[] s_emptyArray = Array.Empty<string>();
private static readonly string[] s_emptyArray = [];

private static readonly MethodInfo s_getValueMethod = typeof(IDictionary<string, object>).GetProperty("Item").GetGetMethod();
private static readonly MethodInfo s_setValueMethod = typeof(CsvRecord).GetMethod(nameof(CsvRecord.SetValue), new[] { typeof(string), typeof(object) });
Expand All @@ -21,52 +21,35 @@ public CsvRecordMetaObject(Expression expression, BindingRestrictions restrictio

public override DynamicMetaObject BindGetIndex(GetIndexBinder binder, DynamicMetaObject[] indexes)
{
var parameters = new[]
{
indexes[0].Expression
};
Expression[] parameters = [indexes[0].Expression];

return CallMethod(s_getValueMethod, parameters);
}

public override DynamicMetaObject BindGetMember(GetMemberBinder binder)
{
var parameters = new Expression[]
{
Expression.Constant(binder.Name)
};
Expression[] parameters = [Expression.Constant(binder.Name)];

return CallMethod(s_getValueMethod, parameters);
}

public override DynamicMetaObject BindInvokeMember(InvokeMemberBinder binder, DynamicMetaObject[] args)
{
var parameters = new Expression[]
{
Expression.Constant(binder.Name)
};
Expression[] parameters = [Expression.Constant(binder.Name)];

return CallMethod(s_getValueMethod, parameters);
}

public override DynamicMetaObject BindSetIndex(SetIndexBinder binder, DynamicMetaObject[] indexes, DynamicMetaObject value)
{
var parameters = new[]
{
indexes[0].Expression,
value.Expression
};
Expression[] parameters = [indexes[0].Expression, value.Expression];

return CallMethod(s_setValueMethod, parameters);
}

public override DynamicMetaObject BindSetMember(SetMemberBinder binder, DynamicMetaObject value)
{
var parameters = new[]
{
Expression.Constant(binder.Name),
value.Expression
};
Expression[] parameters = [Expression.Constant(binder.Name), value.Expression];

return CallMethod(s_setValueMethod, parameters);
}
Expand Down
Loading