Solution in different C# versions
C# 8 with at least .NET Core 3.0 or .NET Standard 2.1
public static class StringExtensions { public static string FirstCharToUpper(this string input) => input switch { null => throw new ArgumentNullException(nameof(input)), "" => throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)), _ => string.Concat(input[0].ToString().ToUpper(), input.AsSpan(1)) }; }
Since .NET Core 3.0 / .NET Standard 2.1 String.Concat()
supports ReadonlySpan<char>
which saves one allocation if we use .AsSpan(1)
instead of .Substring(1)
.
C# 8
public static class StringExtensions { public static string FirstCharToUpper(this string input) => input switch { null => throw new ArgumentNullException(nameof(input)), "" => throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)), _ => input[0].ToString().ToUpper() + input.Substring(1) }; }
C# 7
public static class StringExtensions { public static string FirstCharToUpper(this string input) { switch (input) { case null: throw new ArgumentNullException(nameof(input)); case "": throw new ArgumentException($"{nameof(input)} cannot be empty", nameof(input)); default: return input[0].ToString().ToUpper() + input.Substring(1); } } }
Really old answers
public static string FirstCharToUpper(string input) { if (String.IsNullOrEmpty(input)) throw new ArgumentException("ARGH!"); return input.First().ToString().ToUpper() + String.Join("", input.Skip(1)); }
This version is shorter. For a faster solution, take a look at Diego’s answer.
public static string FirstCharToUpper(string input) { if (String.IsNullOrEmpty(input)) throw new ArgumentException("ARGH!"); return input.First().ToString().ToUpper() + input.Substring(1); }
Probably the fastest solution is Darren’s (There’s even a benchmark) although I would change it’s string.IsNullOrEmpty(s)
validation to throw an exception since the original requirement expects for a first letter to exist so it can be uppercased. Note that this code works for a generic string and not particularly on valid values from the Textbox
.