C# コマンド ライン パラメーター分割スキル
はじめに
C# では、コマンド ライン引数を含む 1 つの文字列から 1 つの引数を抽出するのが一般的なタスクです。ただし、この目的のために直接設計された関数がない場合もあります。この記事では、標準機能またはカスタム ソリューションを使用してこれを実現する手法について詳しく説明します。
標準分割機能
残念ながら、C# には、個々の文字の評価に基づいて文字列を分割する組み込み関数が提供されていません。これは、より創造的なアプローチに依存する必要があることを意味します。
Lambda 関数を使用したカスタム ソリューション
1 つの方法は、特定の文字で文字列を分割するかどうかを決定するラムダ関数を作成することです。この関数を使用すると、C# の Split メソッドを利用して、それに応じて文字列を分割できます。例は次のとおりです:
<code class="language-csharp">public static IEnumerable<string> SplitCommandLine(string commandLine) { bool inQuotes = false; return commandLine.Split(c => { if (c == '\"') inQuotes = !inQuotes; return !inQuotes && c == ' '; }) .Select(arg => arg.Trim().TrimMatchingQuotes('\"')) .Where(arg => !string.IsNullOrEmpty(arg)); }</code>
TrimMatchingQuotes 拡張メソッドは、文字列の先頭と末尾から一致する引用符を削除します。
カスタマイズされた分割およびトリム拡張メソッド
もう 1 つのオプションは、String クラスを拡張して、ラムダ関数を入力として受け入れる Split メソッドと、引用符のトリミングを処理する TrimMatchingQuotes メソッドを含めることです。これらの拡張機能は次のようになります:
<code class="language-csharp">public static IEnumerable<string> Split(this string str, Func<char, bool> controller) { int nextPiece = 0; for (int c = 0; c < str.Length; c++) { if (controller(str[c])) { yield return str.Substring(nextPiece, c - nextPiece).Trim(); nextPiece = c + 1; } } yield return str.Substring(nextPiece).Trim(); } public static string TrimMatchingQuotes(this string input, char quote) { if ((input.Length >= 2) && (input[0] == quote) && (input[input.Length - 1] == quote)) return input.Substring(1, input.Length - 2); return input; }</code>
総合アプリケーション
このアプローチにより、コマンド ライン引数文字列を 1 つの引数配列に分割し、コマンド ラインで直接引数を指定する動作を再現できます。
結論
C# にはコマンド ライン引数を分割するための特別な機能がありませんが、ラムダ関数を使用したり、String クラスを拡張したりしてカスタム ソリューションを実装できる柔軟性が備わっています。これらのメソッドは、さらなる処理または実行のために個々のパラメータを抽出するための効率的かつ信頼性の高い方法を提供します。
以上がC# でコマンドライン パラメーターを効率的に分割する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。