3

標準のコンソール アプリケーションに Script# の参照を追加しました。その後、そこからいくつかのメソッドを呼び出そうとしましたが、次のエラーが発生していました:

MissingMethodException

次の行で発生したと思います。

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

私の仮定は、通常のmscorlibライブラリには method がなくpublic string[] Split(char separator)public string[] Split(params char[] separator)

Script# プロジェクトと標準的な C# .NET プロジェクトの両方で、このような文字列操作で有効なコードを書くことは可能ですか? この問題のため、最小限の違いで両方のプロジェクトに重複したコードを書かなければなりません。

PSこのSOの質問で説明されているように、アセンブリバインディングリダイレクトを使用しようとしましたが、役に立ちませんでした。

4

2 に答える 2

3

編集: 私にとっての唯一の解決策は拡張メソッドのようです。Split標準の.NETと同様に、Script#の文字列タイプの上に拡張メソッドを定義できます。String.Splitつまり、を受け入れparams char[]ます。そして、その場合にのみ、同じコードを使用できます。

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

または、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. Split任意の Script# クラスで文字列分割のメソッドを作成します。

  2. .NET プロジェクトで条件付きコンパイル シンボルDOTNETを定義します。

  3. SplitScript# のメソッドでリンクファイルとして .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 に答える