在标准C#.NET项目中使用脚本#代码和字符串操作

时间:2012-11-06 22:02:08

标签: c# .net string script#

我在我的标准控制台应用程序中添加了脚本#的引用。之后我试图从那里调用一些方法,但是收到了以下错误:

MissingMethodException

我想它发生在以下一行:

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

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

是否可以为Script#项目和标准C#.NET项目编写带有此类字符串操作的有效代码?由于这个问题,我必须为两个项目编写重复的代码,差别很小。

P.S。我尝试使用assemblty绑定重定向,如this SO问题中所述,但它对我没有帮助。

2 个答案:

答案 0 :(得分:3)

修改 我唯一的解决方案似乎是扩展方法。您可以在Script#的String类型之上定义扩展方法Split,类似于标准.NET String.Split,即接受params char[]。只有这样你才能使用相同的代码。

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

或者,如果脚本#对扩展名是严格的,则在标准String类型之上定义扩展名。但我认为不应该是一个问题,因为扩展方法只是一个静态方法。

OLD ANSWER:在意识到脚本#不接受params char[]后,以下答案变得不正确:

您通过将s.Split传递给char来调用params char[]。但是,此方法接受char。虽然C#编译器允许您将Split传递给char[],但它稍后会将其编译为传递string[] lines = s.Split(new char[] { ';' }); 。因此,如果您希望脚本#和C#使用相同的代码,请将代码更改为以下方式:

{{1}}

这适用于Script#和C#。

答案 1 :(得分:0)

我找到了解决方案!

我的行动顺序:

  1. 在任何脚本#class中创建Split字符串拆分方法。

  2. 在.NET项目中定义条件编译符号 DOTNET

  3. 将链接文件添加到脚本#中的Split方法到.NET项目,并添加其他必要的相关文件作为链接。

  4. 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项目中定义。其他类似的方法,不仅是字符串,都可以用同样的方式重写。