Wolfgang.Extensions.String 0.1.1

Prefix Reserved
dotnet add package Wolfgang.Extensions.String --version 0.1.1
                    
NuGet\Install-Package Wolfgang.Extensions.String -Version 0.1.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Wolfgang.Extensions.String" Version="0.1.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Wolfgang.Extensions.String" Version="0.1.1" />
                    
Directory.Packages.props
<PackageReference Include="Wolfgang.Extensions.String" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Wolfgang.Extensions.String --version 0.1.1
                    
#r "nuget: Wolfgang.Extensions.String, 0.1.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Wolfgang.Extensions.String@0.1.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Wolfgang.Extensions.String&version=0.1.1
                    
Install as a Cake Addin
#tool nuget:?package=Wolfgang.Extensions.String&version=0.1.1
                    
Install as a Cake Tool

Wolfgang.Extensions.String

A collection of extension methods for string — substring helpers (Left / Right), center-padding (PadCenter), and case conversions (ToCamelCase / ToKebabCase / ToPascalCase / ToSnakeCase / ToTitleCase).

NuGet NuGet downloads PR build Release License: MIT .NET GitHub


📦 Installation

dotnet add package Wolfgang.Extensions.String

📄 License

This project is licensed under the MIT License. See the LICENSE file for details.


📚 Documentation


🚀 Quick Start

using System;
using Wolfgang.Extensions.String;

// Substring helpers (null-tolerant, length-clamped)
var path = "/usr/local/bin/app";
var first5 = path.Left(5);    // "/usr/"
var last3 = path.Right(3);    // "app"

// Centered formatting
Console.WriteLine($"{"Name".PadCenter(10)}|{"Date".PadCenter(12)}");
Console.WriteLine("----------+------------");
Console.WriteLine($"{"Steve",-10}|{"04/13/2026".PadCenter(12)}");

// Case conversions
var input = "user login count";
Console.WriteLine(input.ToCamelCase());   // "userLoginCount"
Console.WriteLine(input.ToKebabCase());   // "user-login-count"
Console.WriteLine(input.ToPascalCase());  // "UserLoginCount"
Console.WriteLine(input.ToSnakeCase());   // "user_login_count"
Console.WriteLine(input.ToTitleCase());   // "User Login Count"

✨ Features

The table below is a snapshot of the public API at the time of writing. For the authoritative list (kept in sync with source on every release), see the API documentation.

Methods

Method Returns Description
Left(this string, int length) string Returns the leftmost length characters. Returns the whole string when it is shorter than length; returns null for a null input.
Right(this string, int length) string Returns the rightmost length characters. Returns the whole string when it is shorter than length; returns null for a null input.
PadCenter(this string, int totalWidth) string Centers the string within totalWidth, padding both sides with spaces. When padding is uneven the extra character goes on the right. Returns the original string when it is already at least totalWidth long.
PadCenter(this string, int totalWidth, char paddingChar) string As above, padding with paddingChar instead of spaces.
ToCamelCase(this string) string Converts to camelCase. Separator characters are treated as word boundaries and removed.
ToKebabCase(this string) string Converts to kebab-case. Separator characters become dashes.
ToPascalCase(this string) string Converts to PascalCase. Separator characters are treated as word boundaries and removed.
ToSnakeCase(this string) string Converts to snake_case. Separator characters become underscores.
ToTitleCase(this string) string Converts to Title Case, preserving spaces and punctuation. Delegates to TextInfo.ToTitleCase using the current culture.

Left / Right are length-clamping and null-tolerant. PadCenter and the ToXxxCase methods throw ArgumentNullException for a null input; PadCenter throws ArgumentOutOfRangeException for a negative width. Separator handling uses char.IsSeparator, so control characters and punctuation are preserved.

Examples

// Substring helpers
"A sample string".Left(8);    // "A sample"
"Hello".Left(10);             // "Hello"   (shorter than requested → unchanged)
"Hello".Left(0);              // ""

"A sample string".Right(6);   // "string"
"Hello".Right(10);            // "Hello"
"Hello".Right(0);             // ""

// Center padding
"Hello".PadCenter(11);        // "   Hello   "
"Hello".PadCenter(11, '-');   // "---Hello---"
"Hello".PadCenter(3);         // "Hello"   (already wide enough → unchanged)

// Case conversions
"A sample string for processing".ToCamelCase();   // "aSampleStringForProcessing"
"A sample string for processing".ToKebabCase();   // "a-sample-string-for-processing"
"A sample string for processing".ToPascalCase();  // "ASampleStringForProcessing"
"A sample string for processing".ToSnakeCase();   // "a_sample_string_for_processing"
"a sample string for processing".ToTitleCase();   // "A Sample String For Processing"

Note: ToTitleCase is a general-purpose implementation that delegates to TextInfo.ToTitleCase. Proper names, addresses, and other domain-specific text often require specialized handling (e.g., "McDonald", "van der Berg", "O'Brien") that is not provided here.


🎯 Target Frameworks

Framework Versions
.NET Framework .NET Framework 4.6.2
.NET Standard .NET Standard 2.0
.NET .NET 8.0, .NET 10.0

🔍 Code Quality & Static Analysis

This project enforces strict code quality standards through 8 analyzer rule sets (7 explicit PackageReferences plus the .NET SDK's built-in Microsoft.CodeAnalysis.NetAnalyzers), a <TreatWarningsAsErrors>true</TreatWarningsAsErrors> Release gate, and a banned-API ruleset:

Analyzers in Use

  1. Microsoft.CodeAnalysis.NetAnalyzers — Built-in .NET analyzers for correctness and performance
  2. Roslynator.Analyzers — Advanced refactoring and code quality rules
  3. AsyncFixer — Async/await best practices and anti-pattern detection
  4. Microsoft.VisualStudio.Threading.Analyzers — Thread safety and async patterns
  5. Microsoft.CodeAnalysis.BannedApiAnalyzers — Prevents usage of banned synchronous APIs (see BannedSymbols.txt)
  6. Meziantou.Analyzer — Comprehensive code quality rules
  7. SonarAnalyzer.CSharp — Industry-standard code analysis
  8. Microsoft.CodeAnalysis.PublicApiAnalyzers — Tracks the public API surface via PublicAPI.Shipped.txt / PublicAPI.Unshipped.txt; surfaces additions/removals at compile time as a breaking-change review gate

🛠️ Building from Source

Prerequisites

Build Steps

# Clone the repository
git clone https://github.com/Chris-Wolfgang/String-Extensions.git
cd String-Extensions

# Restore dependencies
dotnet restore

# Build the solution
dotnet build --configuration Release

# Run tests
dotnet test --configuration Release

# Run the benchmarks (optional)
dotnet run -c Release --project benchmarks/Wolfgang.Extensions.String.Benchmarks -- --filter '*'

# Run code formatting (PowerShell Core)
pwsh ./scripts/format.ps1

Code Formatting

This project uses .editorconfig and dotnet format:

# Format code
dotnet format

# Verify formatting (as CI does)
dotnet format --verify-no-changes

See docs/README-FORMATTING.md for detailed formatting guidelines.


🤝 Contributing

Contributions are welcome! Please see CONTRIBUTING.md for:

  • Code quality standards
  • Build and test instructions
  • Pull request guidelines
  • Analyzer configuration details
Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  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. 
.NET Core netcoreapp2.0 was computed.  netcoreapp2.1 was computed.  netcoreapp2.2 was computed.  netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.0 is compatible.  netstandard2.1 was computed. 
.NET Framework net461 was computed.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen40 was computed.  tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .NETFramework 4.6.2

    • No dependencies.
  • .NETStandard 2.0

    • No dependencies.
  • net10.0

    • No dependencies.
  • net8.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.1.1 121 6/20/2026
0.1.0 111 4/28/2026
0.0.0 117 4/28/2026