【问题标题】:Why does String.Split() not allow a single string as a parameter为什么 String.Split() 不允许单个字符串作为参数
【发布时间】:2019-03-15 06:26:38
【问题描述】:

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

String[] parm = line.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);
}

【问题讨论】:

标签: c# string list


【解决方案1】:

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 关键字,您可以指定一个方法参数 接受可变数量的参数。

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

【讨论】:

  • 这是正确答案。只有在将 param 变量更改为“params”之后,我的脚本才起作用。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    错误消息可能看起来有点奇怪,但归根结底是没有方法Split 接受string 类型的单个参数。

    根据docs,您的选择是:

    采用string 的最接近的重载应该是这样写的:

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

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

    或者,您可以简单地用 char 调用它:

    line.Split(',');
    

    【讨论】:

      【解决方案4】:

      这样改。

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

      Split 适用于 char,而不是您期望的字符串。

      【讨论】:

        【解决方案5】:

        "," 替换为','

        string.Split() 不接受字符串参数作为分隔符,它接受一个字符数组。

        【讨论】:

          猜你喜欢
          • 2013-10-21
          • 2012-03-07
          • 2023-03-27
          • 2021-07-18
          • 2012-02-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多