Почему String.Split () не допускает использование одной строки в качестве параметра - PullRequest
3 голосов
/ 15 марта 2019

Я пытаюсь написать один из моих первых скриптов на c # для решения по автоматизации дома (homeseer).У меня есть другие проблемы, которые необходимо решить с помощью приведенного ниже кода, однако простая строка:

String[] parm = line.Split(",");

приводит к ошибке:

Тип 'string' не содержит определения для `Split 'и не найден метод расширения' Split 'типа' string '(вы пропустили директиву using или ссылку на сборку?)

Я опубликую еще один вопрос для других моих проблем

using System;
using System.Collections.Generic;

public void Main(string line)
{
    String[] parm = line.Split(",");
    var windowDoorOpenVar = hs.GetVar("WindowDoorOpen");
    if (windowDoorOpenVar.Size == 0 || windowDoorOpenVar == null)
    {
        hs.CreateVar("WindowDoorOpen");
        List<string> windowDoorOpen = new List<string>();
    }
    else
    {
        List windowDoorOpen = windowDoorOpenVar;
    }

    switch (parm[0])
    {
        case "Open":
            windowDoorOpen.Add(parm[1]);
            break;
        case "Closed":
            windowDoorOpen.Remove(parm[1]);
            break;
    }
    hs.SaveVar("WindowDoorOpen", windowDoorOpen);
}

Ответы [ 5 ]

3 голосов
/ 15 марта 2019

Split имеет только эти перегрузки

Split(String[], Int32, StringSplitOptions)

Разбивает строку на максимальное количество подстрок на основена строки в массиве.Вы можете указать, включают ли подстроки пустые элементы массива.

Split(Char[], Int32, StringSplitOptions)

Разбивает строку на максимальное количество подстрок на основесимволы в массиве.

Split(String[], StringSplitOptions)

Разбивает строку на подстроки на основе строк в массиве.Вы можете указать, включают ли подстроки пустые элементы массива

Split(Char[])

Разбивает строку на подстроки, основанные на символах вмассив.

Split(Char[], StringSplitOptions)

Разбивает строку на подстроки на основе символов в массиве.Вы можете указать, включают ли подстроки пустые элементы массива.

Split(Char[], Int32)

Разбивает строку на максимальное количество подстрок на основесимволы в массиве.Вы также указываете максимальное количество возвращаемых подстрок.


Если вам действительно не нравится вводить массив new []{","}, вы можете свернуть свой собственный Метод расширения специально для одного string и аналогичных

public static class StringExtensions
{
   public static string[] Split(this string source, string value, StringSplitOptions options = StringSplitOptions.None)
   {
      return source?.Split(new[] { value }, options);
   }

   public static string[] Split(this string source, params string[] values)
   {
      return source?.Split(values, StringSplitOptions.None);
   }
}

...

// usage
var someString = "string";
someString.Split(",");
someString.Split(",",".");
someString.Split(",", StringSplitOptions.RemoveEmptyEntries);

Интересно, почему вы можете вызвать Split(','), потому что он использует params массив

params(Справочник по C #)

Используя ключевое слово params, вы можете указать параметр метода, который принимает переменное число аргументов.

Вы можете отправить список через запятуюаргументов типа, указанного в объявлении параметра, или массив аргументов указанного типа.Вы также можете отправить без аргументов.Если вы не отправляете аргументы, длина списка параметров равна нулю.

2 голосов
/ 15 марта 2019

Сообщение об ошибке может показаться немного странным, но оно сводится к тому, что не существует метода Split, который принимает один аргумент типа string.

Согласно документы , ваши варианты:

Ближайшая перегрузка, которая принимает string будет написано так:

line.Split(new string[] { "," }, StringSplitOptions.None);

или

line.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);

В качестве альтернативы, вы можете просто вызвать его с помощью символа:

line.Split(',');
2 голосов
/ 15 марта 2019

Вы должны использовать ',' вместо ",", потому что когда вы используете двойные кавычки, это тип строки, но нет перегрузки String.Split(), который получает строку как один параметр.Вы можете использовать другие перегрузки, перечисленные здесь .

2 голосов
/ 15 марта 2019

Изменить, как это.

String[] parm = line.Split(',');

Split работает с символом, а не строкой, которую вы ожидали сформировать ..

1 голос
/ 15 марта 2019

заменить "," на ','

string.Split() не принимает строковый параметр для символов разделителя, он принимает массив символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...