Я хотел бы иметь метод, который преобразует первый символ строки в нижний регистр.
Мои подходы:
1.
public static string ReplaceFirstCharacterToLowerVariant(string name)
{
return String.Format("{0}{1}", name.First().ToString().ToLowerInvariant(), name.Substring(1));
}
2.
public static IEnumerable<char> FirstLetterToLowerCase(string value)
{
var firstChar = (byte)value.First();
return string.Format("{0}{1}", (char)(firstChar + 32), value.Substring(1));
}
Каков будет ваш подход?
char.ToLower(name[0]).ToString() + name.Substring(1)
+
оператор работает медленно, когда вы объединяете много строк. В этом случае онStringBuilder
будет работать намного лучше. Тем не менее,+
это гораздо быстрее, чемstring.Format
. Используйте последнее, когда вам действительно нужно что-то отформатировать (например, отображать целые числа, двойные числа или даты).+
оператор вообще не работает медленно, потому что компилятор превращает его вString.Concat
(ноString.Join
это быстрее, чемString.Concat
по какой-то глупой причине).public static string ToLowerFirst(this string source) { if (string.IsNullOrWhiteSpace(source)) return source; var charArray = source.ToCharArray(); charArray[0] = char.ToLower(charArray[0]); return new string(charArray); }
на основе комментария @ MatteoMigliore.В зависимости от ситуации может потребоваться небольшое защитное программирование:
Этот
if
оператор также предотвращает создание новой строки, если она все равно не будет изменена. Возможно, вы захотите, чтобы метод потерпел неудачу на нулевом вводе, и бросилArgumentNullException
.Как уже упоминалось, использование
String.Format
для этого является излишним.источник
На всякий случай это поможет любому, кто случайно наткнется на этот ответ.
Я думаю, что это будет лучше в качестве метода расширения, тогда вы можете вызвать его с помощью yourString.FirstCharacterToLower ();
источник
Мой
источник
val.Remove
? Кажется, немного нелогичным для меня.Мне нравится принятый ответ, но помимо проверки
string.IsNullOrEmpty
я бы также проверил, еслиChar.IsLower(name[1])
вы имеете дело с сокращением. Например, вы не хотели бы, чтобы «СПИД» стал «СПИДом».источник
Самое быстрое решение, которое я знаю, не злоупотребляя c #:
источник
Объединили несколько и сделали его цепным расширением. Добавлено короткое замыкание на пробел и не букву.
источник
Это небольшой метод расширения, использующий последний синтаксис и правильные проверки
источник
Использовать это:
источник
Лучше использовать,
String.Concat
чемString.Format
если вы знаете, что формат не изменяет данные, а просто объединение желательно.источник