在非标准C#.NET项目中使用脚本#代码字符串操作(Using Script# code with

2019-07-03 15:00发布

我加的脚本#参考我的非标准的控制台应用程序。 从那以后,我试图援引从那里的一些方法,但居然也得到了以下错误:

我想这发生在下面一行:

string[] lines = s.Split(';');

我的假设是,通常的mscorlib库有没有方法public string[] Split(char separator) ,但具有public string[] Split(params char[] separator)

是否有可能写这样的字符串操作有效的代码都为一个脚本#项目和一个非标准C#.NET项目? 由于这个问题我必须写重复的代码与最小差异这两个项目。

PS我试图用assemblty绑定重定向,在讨论这个SO问题,但它并没有帮助我。

Answer 1:

编辑:我唯一的解决办法似乎是扩展方法。 可以定义扩展方法Split上类似于标准的.NET脚本#的字符串类型的顶部String.Split ,即接受params char[] 只有这样,你可以使用相同的代码。

string[] lines = s.Split(new char[] { ';' });

可替换地,限定在标准字符串类型的顶部延伸,在壳体脚本#是严格上扩展。 但是我想既然扩展方法只是一个静态方法不应该是一个问题。

OLD答:认识到脚本#不接受后params char[]下面的答案不正确变成了:

您正在调用s.Split通过将char它。 然而,该方法接受params char[] 虽然C#编译器允许你传递charSplit ,后来编译成合格char[] 所以,如果你想拥有同样的代码,两个脚本#和C#的工作,改变你的代码,以下列方式:

string[] lines = s.Split(new char[] { ';' });

这两个脚本#和C#的工作。



Answer 2:

我找到了解决方案!

我的行动顺序:

  1. 创建Split任何脚本#类的字符串分割的方法。

  2. 定义你的.NET项目条件编译符号DOTNET。

  3. 添加为链接文件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项目。 其他类似的方法,不仅与字符串,可以以同样的方式重写。



文章来源: Using Script# code with string operations in standart C# .NET project