小编典典

使字符串的第一个字母大写(具有最高性能)

all

我有 a DetailsViewTextBox 我希望 输入数据 始终以 _ 大写的第一个字母* _保存 。 _ *_

例子:

"red" --> "Red"
"red house" --> " Red house"

我怎样才能实现这种 最大化的性能


注意

根据答案和答案下的评论,许多人认为这是在询问是否将字符串中的 所有单词大写。 例如=> Red House ,不是,但如果那是您所寻求
的,请寻找使用TextInfoToTitleCase方法的答案之一。(注意:对于实际提出的问题,这些答案是 不正确的。)请参阅
TextInfo.ToTitleCase
文档
以了解警告(不涉及全大写单词
-
它们被视为首字母缩略词;可能在“不应该”的单词中间出现小写字母降低,例如,“McDonald”-“Mcdonald”;不保证处理所有特定于文化的细微差别重新大写规则。)


注意

关于第一个之后的字母是否应该 强制* 小写 的问题是 模棱两可 的。接受的答案假定 只有第一个字母应该改变 。如果您想强制
字符串中除第一个之外的所有字母 为小写字母,请查找包含且不 包含 ToTitleCase 的答案。
* ToLower


阅读 113

收藏
2022-03-08

共1个答案

小编典典

不同C#版本的解决方案

至少具有 .NET Core 3.0 或 .NET Standard 2.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)),
            _ => string.Concat(input[0].ToString().ToUpper(), input.AsSpan(1))
        };
}

由于 .NET Core 3.0 / .NET Standard
2.1String.Concat()支持ReadonlySpan<char>如果我们使用.AsSpan(1)而不是.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);
        }
    }
}

真的很老的答案

public static string FirstCharToUpper(string input)
{
    if (String.IsNullOrEmpty(input))
        throw new ArgumentException("ARGH!");
    return input.First().ToString().ToUpper() + String.Join("", input.Skip(1));
}

这个版本较短。如需更快的解决方案,请查看Diego
的答案

public static string FirstCharToUpper(string input)
{
    if (String.IsNullOrEmpty(input))
        throw new ArgumentException("ARGH!");
    return input.First().ToString().ToUpper() + input.Substring(1);
}

最快的解决方案可能是Darren 的(甚至还有一个基准),尽管我会更改它的string.IsNullOrEmpty(s)验证以引发异常,因为最初的要求期望第一个字母存在,因此它可以大写。请注意,此代码适用于通用字符串,而不是特别适用于Textbox.

2022-03-08