我在我的标准控制台应用程序中添加了脚本#的引用。之后我试图从那里调用一些方法,但是收到了以下错误:
我想它发生在以下一行:
string[] lines = s.Split(';');
我的假设是,通常的 mscorlib 库没有方法public string[] Split(char separator)
,但有public string[] Split(params char[] separator)
是否可以为Script#项目和标准C#.NET项目编写带有此类字符串操作的有效代码?由于这个问题,我必须为两个项目编写重复的代码,差别很小。
P.S。我尝试使用assemblty绑定重定向,如this SO问题中所述,但它对我没有帮助。
答案 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)
我找到了解决方案!
我的行动顺序:
在任何脚本#class中创建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项目中定义。其他类似的方法,不仅是字符串,都可以用同样的方式重写。