我正在尝试为家庭自动化解决方案(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);
}
答案 0 :(得分:3)
Split
仅具有这些重载
Split(String[], Int32, StringSplitOptions)
根据字符串将字符串拆分为最大数量的子字符串 数组中的字符串。您可以指定子字符串是否包含 空数组元素。
Split(Char[], Int32, StringSplitOptions)
根据字符串将字符串拆分为最大数量的子字符串 数组中的字符。
Split(String[], StringSplitOptions)
根据数组中的字符串将字符串拆分为子字符串。您 可以指定子字符串是否包含空数组元素
根据一个字符串中的字符将一个字符串拆分为多个子字符串 数组。
Split(Char[], StringSplitOptions)
根据数组中的字符将字符串拆分为子字符串。 您可以指定子字符串是否包含空数组元素。
根据字符串将字符串拆分为最大数量的子字符串 数组中的字符。您还可以指定最大数量 子字符串返回。
如果您真的不喜欢输入数组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关键字,您可以指定一个方法参数 接受可变数量的参数。
您可以发送以逗号分隔的指定类型的参数列表 在参数声明或指定参数的数组中 类型。您也不能发送任何参数。如果您不发送任何参数,则 参数列表的长度为零。
答案 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()
不使用分隔符的字符串参数,而是使用字符数组。