为什么String.Split()不允许将单个字符串作为参数

时间:2019-03-15 06:26:38

标签: c# string list

我正在尝试为家庭自动化解决方案(homeseer)编写第一个c#脚本。我还有其他问题可以通过下面的代码来解决,但是简单的一行:

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

导致错误:

  

类型'string'不包含'Split'的定义,并且没有   可以找到类型为'string'的扩展方法'Split'(您是   缺少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 个答案:

答案 0 :(得分:3)

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# Reference)

  

通过使用params关键字,您可以指定一个方法参数   接受可变数量的参数。

     

您可以发送以逗号分隔的指定类型的参数列表   在参数声明或指定参数的数组中   类型。您也不能发送任何参数。如果您不发送任何参数,则   参数列表的长度为零。

答案 1 :(得分:2)

像这样改变。

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

Split与char一起使用,而不是您期望的字符串形式。.

答案 2 :(得分:2)

您应该使用','而不是",",因为在使用双引号时,它是字符串类型,但是String.Split()不会将字符串作为单参数接收的重载。您可以使用here中列出的其他重载。

答案 3 :(得分:2)

错误消息可能看起来有些奇怪,但是可以归结为以下事实:没有方法Split接受类型为string的单个参数。

根据docs,您的选择是:

采用string的最接近的重载将这样写:

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

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

或者,您可以简单地用一个字符来调用它:

line.Split(',');

答案 4 :(得分:1)

","替换为','

string.Split()不使用分隔符的字符串参数,而是使用字符数组。