在标准C#.NET项目中使用脚本#代码和字符串操作
我在我的标准控制台应用程序中添加了脚本#的引用。 之后,我试图从那里调用一些方法,但收到以下错误:
我想它发生在以下几行:
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#。
我找到了解决方案
我的行动顺序:
-
在任何Script#类中创建
Split
方法。 -
在.NET项目中定义条件编译符号DOTNET 。
-
使用
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项目中定义。 其他类似的方法,不仅与字符串,可以以相同的方式重写。