我加的脚本#参考我的非标准的控制台应用程序。 从那以后,我试图援引从那里的一些方法,但居然也得到了以下错误:
我想这发生在下面一行:
string[] lines = s.Split(';');
我的假设是,通常的mscorlib库有没有方法public string[] Split(char separator)
,但具有public string[] Split(params char[] separator)
是否有可能写这样的字符串操作有效的代码都为一个脚本#项目和一个非标准C#.NET项目? 由于这个问题我必须写重复的代码与最小差异这两个项目。
PS我试图用assemblty绑定重定向,在讨论这个SO问题,但它并没有帮助我。
编辑:我唯一的解决办法似乎是扩展方法。 可以定义扩展方法Split
上类似于标准的.NET脚本#的字符串类型的顶部String.Split
,即接受params char[]
只有这样,你可以使用相同的代码。
string[] lines = s.Split(new char[] { ';' });
可替换地,限定在标准字符串类型的顶部延伸,在壳体脚本#是严格上扩展。 但是我想既然扩展方法只是一个静态方法不应该是一个问题。
OLD答:认识到脚本#不接受后params char[]
下面的答案不正确变成了:
您正在调用s.Split
通过将char
它。 然而,该方法接受params char[]
虽然C#编译器允许你传递char
来Split
,后来编译成合格char[]
所以,如果你想拥有同样的代码,两个脚本#和C#的工作,改变你的代码,以下列方式:
string[] lines = s.Split(new char[] { ';' });
这两个脚本#和C#的工作。
我找到了解决方案!
我的行动顺序:
创建Split
任何脚本#类的字符串分割的方法。
定义你的.NET项目条件编译符号DOTNET。
添加为链接文件Split
从脚本#至.NET项目方法,并添加为纽带另一个必要的相关文件。
public static string[] Split(string str, string separator)
{
string[] result;
#if DOTNET
result = str.Split(new string[] { separator }, System.StringSplitOptions.None);
#else
result = str.Split(separator);
#endif
return result;
}
这个适当的代码之后将被选择依赖于DOTNET符号,其定义仅在.NET项目。 其他类似的方法,不仅与字符串,可以以同样的方式重写。