diff --git a/SpreadCheetah.Test/Tests/SpreadsheetRowTests.cs b/SpreadCheetah.Test/Tests/SpreadsheetRowTests.cs index 77f4e095..c85dc22e 100644 --- a/SpreadCheetah.Test/Tests/SpreadsheetRowTests.cs +++ b/SpreadCheetah.Test/Tests/SpreadsheetRowTests.cs @@ -27,7 +27,7 @@ public async Task Spreadsheet_AddRow_ThrowsWhenNoWorksheet(bool hasWorksheet) await spreadsheet.StartWorksheetAsync("Sheet"); // Act - var exception = await Record.ExceptionAsync(async () => await spreadsheet.AddRowAsync(Array.Empty())); + var exception = await Record.ExceptionAsync(async () => await spreadsheet.AddRowAsync([])); // Assert Assert.NotEqual(hasWorksheet, exception is SpreadCheetahException); @@ -46,7 +46,7 @@ public async Task Spreadsheet_AddRow_ThrowsWhenAlreadyFinished(bool finished) await spreadsheet.FinishAsync(); // Act - var exception = await Record.ExceptionAsync(async () => await spreadsheet.AddRowAsync(Array.Empty())); + var exception = await Record.ExceptionAsync(async () => await spreadsheet.AddRowAsync([])); // Assert Assert.Equal(finished, exception != null); diff --git a/SpreadCheetah/Helpers/HeaderNameExtensions.cs b/SpreadCheetah/Helpers/HeaderNameExtensions.cs index 72dcdf5a..dd37707f 100644 --- a/SpreadCheetah/Helpers/HeaderNameExtensions.cs +++ b/SpreadCheetah/Helpers/HeaderNameExtensions.cs @@ -14,15 +14,4 @@ public static void CopyToCells( cells[i] = new StyledCell(headerNames[i], styleId); } } - - public static void CopyToCells( - this IList headerNames, - StyledCell[] cells, - StyleId? styleId) - { - for (var i = 0; i < headerNames.Count; ++i) - { - cells[i] = new StyledCell(headerNames[i], styleId); - } - } } diff --git a/SpreadCheetah/SourceGeneration/EmptyWorksheetRowContext.cs b/SpreadCheetah/SourceGeneration/EmptyWorksheetRowContext.cs index 03d3e32f..8c813e7a 100644 --- a/SpreadCheetah/SourceGeneration/EmptyWorksheetRowContext.cs +++ b/SpreadCheetah/SourceGeneration/EmptyWorksheetRowContext.cs @@ -20,13 +20,13 @@ public static class EmptyWorksheetRowContext private static ValueTask AddHeaderRowAsync(Spreadsheet spreadsheet, StyleId? _, CancellationToken token) { - return spreadsheet.AddRowAsync(ReadOnlyMemory.Empty, token); + return spreadsheet.AddRowAsync([], token); } private static ValueTask AddAsRowAsync(Spreadsheet spreadsheet, T _, CancellationToken token) { ArgumentNullException.ThrowIfNull(spreadsheet); - return spreadsheet.AddRowAsync(ReadOnlyMemory.Empty, token); + return spreadsheet.AddRowAsync([], token); } private static ValueTask AddRangeAsRowsAsync(Spreadsheet spreadsheet, IEnumerable objs, CancellationToken token) @@ -40,7 +40,7 @@ private static async ValueTask AddRangeAsEmptyRowsAsync(Spreadsheet spreadshe { foreach (var _ in objs) { - await spreadsheet.AddRowAsync(ReadOnlyMemory.Empty, token).ConfigureAwait(false); + await spreadsheet.AddRowAsync([], token).ConfigureAwait(false); } } } diff --git a/SpreadCheetah/SpreadCheetah.csproj b/SpreadCheetah/SpreadCheetah.csproj index b3c3fea6..4b0e29fd 100644 --- a/SpreadCheetah/SpreadCheetah.csproj +++ b/SpreadCheetah/SpreadCheetah.csproj @@ -9,7 +9,7 @@ SpreadCheetah - 1.19.0 + 1.20.0 sveinungf SpreadCheetah is a high-performance .NET library for generating spreadsheet (Microsoft Excel XLSX) files. icon-package.png diff --git a/SpreadCheetah/Spreadsheet.cs b/SpreadCheetah/Spreadsheet.cs index e80cbb91..72a36648 100644 --- a/SpreadCheetah/Spreadsheet.cs +++ b/SpreadCheetah/Spreadsheet.cs @@ -351,7 +351,7 @@ public async ValueTask AddHeaderRowAsync(ReadOnlyMemory headerNames, Sty { if (headerNames.Length == 0) { - await AddRowAsync(ReadOnlyMemory.Empty, token).ConfigureAwait(false); + await AddRowAsync([], token).ConfigureAwait(false); return; } @@ -373,22 +373,8 @@ public async ValueTask AddHeaderRowAsync(ReadOnlyMemory headerNames, Sty public async ValueTask AddHeaderRowAsync(IList headerNames, StyleId? styleId = null, CancellationToken token = default) { ArgumentNullException.ThrowIfNull(headerNames); - if (headerNames.Count == 0) - { - await AddRowAsync(ReadOnlyMemory.Empty, token).ConfigureAwait(false); - return; - } - - var cells = ArrayPool.Shared.Rent(headerNames.Count); - try - { - headerNames.CopyToCells(cells, styleId); - await AddRowAsync(cells.AsMemory(0, headerNames.Count), token).ConfigureAwait(false); - } - finally - { - ArrayPool.Shared.Return(cells); - } + using var pooledArray = headerNames.ToPooledArray(); + await AddHeaderRowAsync(pooledArray.Memory, styleId, token).ConfigureAwait(false); } ///