3

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

缺少方法异常

我想它发生在以下行:

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

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

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

PS我尝试使用组装绑定重定向,如this SO question中所述,但这对我没有帮助。

4

2 回答 2

3

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

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

或者,在标准 String 类型之上定义扩展,以防 Script# 对扩展有严格要求。但我认为应该不是问题,因为扩展方法只是一个静态方法。

旧答案:在意识到 Script# 不接受params char[]后,以下答案变得不正确:

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

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

这适用于 Script# 和 C#。

于 2012-11-06T22:08:43.967 回答
0

我找到了解决方案!

我的操作顺序:

  1. 在任何 Script# 类中创建Split字符串拆分方法。

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

  3. 使用来自 Script# 的方法将 As Link文件添加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;
}

之后,将根据仅在 .NET 项目中定义的 DOTNET 符号选择适当的代码。其他类似的方法,不仅是字符串,也可以用同样的方式重写。

于 2012-11-07T20:09:39.373 回答