Почему "моя строка".Split (',') работает in.NET C#
почему "my,string".Split(',')
работает в .NET C# ?
объявление разделения в соответствии с MSDN является Split(Char[])
.
строку веб-сайте MSDN.Сплит Способ
я предположил, что C# 5 преобразует один символ ','
до char[] {','}
;
Но я должен ошибаться, потому что следующий код не работает:
static void Main()
{
GetChar(',');
}
static char GetChar(char[] input)
{
return input[0];
}
EDIT: благодаря ответу Джона Скита я изменил аргумент на params char[]
и он работает, доказывая концепцию.
static char GetChar(params char[] input)
{
return input[0];
}
2 ответов
на перегрузка вы используете использует массив параметров, в основном. Вот что такое params
часть. Компилятор автоматически упаковывает ваш единственный аргумент в массив. Так вот:
var x = text.Split(',');
эквивалентно:
var x = text.Split(new char[] { ',' });
вы также можете использовать массив параметров для своих собственных методов с помощью params
ключевые слова:
static char GetChar(params char[] input)
{
return input[0];
}
обратите внимание, что массив параметров должен быть финал параметр. Именно поэтому перегрузки вы используете это только перегрузка Split
для использования массива параметров. Посмотрите на другие перегрузки:
Split(Char[], Int32)
Split(Char[], StringSplitOptions)
Split(String[], StringSplitOptions)
Split(Char[], Int32, StringSplitOptions)
Split(String[], Int32, StringSplitOptions)
в каждом из этих случаев массиве первый параметр, поэтому вам нужно построить массив самостоятельно:
var x = text.Split(new char[] { ',' }, 10); // Call the (char[], int) overload
или используя неявно типизированный массив:
var x = text.Split(new[] { ',' }, 10); // Call the (char[], int) overload
фактическая перегрузка, которая называется этот. Обратите внимание, что заголовок в верхней части страницы вводит в заблуждение, он фактически принимает params char[]
вместо char[]
. Это позволяет передавать в разделители как "my, string".Split(',', ' ')
вместо того, чтобы заставить вас прыгать через обруч с помощью "my, string".Split(new char[] { ',', ' ' })
первый.