Soenneker.Extensions.Enumerable.String
4.0.1432
Prefix Reserved
dotnet add package Soenneker.Extensions.Enumerable.String --version 4.0.1432
NuGet\Install-Package Soenneker.Extensions.Enumerable.String -Version 4.0.1432
<PackageReference Include="Soenneker.Extensions.Enumerable.String" Version="4.0.1432" />
<PackageVersion Include="Soenneker.Extensions.Enumerable.String" Version="4.0.1432" />
<PackageReference Include="Soenneker.Extensions.Enumerable.String" />
paket add Soenneker.Extensions.Enumerable.String --version 4.0.1432
#r "nuget: Soenneker.Extensions.Enumerable.String, 4.0.1432"
#:package Soenneker.Extensions.Enumerable.String@4.0.1432
#addin nuget:?package=Soenneker.Extensions.Enumerable.String&version=4.0.1432
#tool nuget:?package=Soenneker.Extensions.Enumerable.String&version=4.0.1432
Soenneker.Extensions.Enumerable.String
Joining, filtering, case-insensitive searching, casing, deduplication, and compound-ID projection extensions for string sequences.
Installation
dotnet add package Soenneker.Extensions.Enumerable.String
Join values
using Soenneker.Extensions.Enumerable.String;
string csv = new[] { "red", "green", "blue" }
.ToCommaSeparatedString(includeSpace: true);
// red, green, blue
string path = new[] { "api", "customers", "42" }
.ToSeparatedString('/');
// api/customers/42
Both methods return an empty string for a null or empty source. A null item is represented as an empty field, so new[] { "a", null, "b" } joined with commas becomes a,,b. Joining is immediate and visits the source once.
ToSeparatedStringFormattable() is the allocation-conscious overload for value types implementing ISpanFormattable; it avoids the boxing that the unconstrained overload can require. Formatting uses the type’s default format with a null format provider.
Search strings
string[] names = ["Alpha", "Beta"];
names.ContainsAPart("PH"); // true; ignores case by default
names.ContainsAPart("PH", false); // false; ordinal, case-sensitive
names.ContainsIgnoreCase("alpha"); // true
names.StartsWithIgnoreCase("al"); // true
names.EndsWithIgnoreCase("TA"); // true
Searches are ordinal, skip null elements, stop at the first match, and do not allocate normalized copies. ContainsAPart() returns false for a null source or null/empty search text. The other search methods require non-null source and search arguments. An empty prefix or suffix matches when the sequence contains at least one non-null string.
Filter, normalize, and deduplicate
IEnumerable<string?> optionalValues = ["Alpha", null, " ", "alpha"];
IEnumerable<string> nonEmpty = optionalValues.ExceptNullOrEmpty();
IEnumerable<string> nonBlank = optionalValues.ExceptNullOrWhiteSpace();
IEnumerable<string> values = nonBlank;
IEnumerable<string> lower = values.ToLower();
IEnumerable<string> distinct = values.DistinctIgnoreCase();
HashSet<string> set = values.ToHashSetIgnoreCase();
These sequence-returning operations are lazy except ToHashSetIgnoreCase(), which materializes a new ordinal case-insensitive set. ExceptNullOrEmpty() preserves whitespace-only strings; ExceptNullOrWhiteSpace() removes them. ToLower() and ToUpper() use invariant casing and turn null elements into empty strings. DistinctIgnoreCase() skips nulls, keeps the first casing encountered, and preserves order.
Split compound IDs
List<(string PartitionKey, string DocumentId)> ids = new[]
{
"customer-42:order-100",
"standalone"
}.ToSplitIds();
// ("customer-42", "order-100")
// ("standalone", "standalone")
Each ID is split at its last colon, so earlier colons remain part of a compound partition key. The result is immediately materialized in source order. Null or empty IDs are rejected by the underlying split operation.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Soenneker.Extensions.Enumerable (>= 4.0.658)
- Soenneker.Extensions.Spans.ReadOnly.Strings (>= 4.0.33)
- Soenneker.Extensions.String (>= 4.0.737)
NuGet packages (6)
Showing the top 5 NuGet packages that depend on Soenneker.Extensions.Enumerable.String:
| Package | Downloads |
|---|---|
|
Soenneker.Extensions.Object
A collection of helpful Object extension methods |
|
|
Soenneker.Validators.Email.Disposable
Checks whether an email address uses a disposable or temporary domain. |
|
|
Soenneker.SendGrid.Contacts
Adds, retrieves, searches, and deletes SendGrid Marketing contacts. |
|
|
Soenneker.HttpClients.LoggingHandler
A handler that allows for injecting into HttpClients to log requests and responses |
|
|
Soenneker.Extensions.Dtos.Email
A collection of helpful EmailDto extension methods |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.1432 | 0 | 9/4/2026 |
| 4.0.1431 | 5,839 | 8/31/2026 |
| 4.0.1430 | 1,397 | 8/31/2026 |
| 4.0.1429 | 1,169 | 8/31/2026 |
| 4.0.1428 | 923 | 8/31/2026 |
| 4.0.1426 | 947 | 8/30/2026 |
| 4.0.1425 | 656 | 8/30/2026 |
| 4.0.1423 | 76 | 8/30/2026 |
| 4.0.1422 | 4,903 | 8/30/2026 |
| 4.0.1421 | 1,612 | 8/30/2026 |
| 4.0.1419 | 76 | 8/30/2026 |
| 4.0.1418 | 407 | 8/30/2026 |
| 4.0.1416 | 79 | 8/29/2026 |
| 4.0.1414 | 1,180 | 8/29/2026 |
| 4.0.1413 | 80 | 8/29/2026 |
| 4.0.1412 | 276 | 8/29/2026 |
| 4.0.1411 | 355 | 8/29/2026 |
| 4.0.1410 | 24,548 | 8/26/2026 |
| 4.0.1408 | 1,172 | 8/25/2026 |
| 4.0.1407 | 90 | 8/25/2026 |
Updated Soenneker.Extensions.String to 4.0.737