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

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

MissingMethodException

我想它发生在以下几行:

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

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

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

PS我尝试使用assemblty绑定重定向,正如在这个SO问题中讨论的那样,但它对我没有帮助。

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

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

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

老答案:在意识到脚本#不接受params char[] ,下面的答案变得不正确:

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

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

这适用于Script#和C#。

我找到了解决方案

我的行动顺序:

  1. 在任何Script#类中创建Split方法。

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

  3. 使用Split方法从Script# 添加为链接文件到.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项目中定义。 其他类似的方法,不仅与字符串,可以以相同的方式重写。