Почему "моя строка".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[] { ',', ' ' }) первый.