8

String.Split区切り文字列と分割するテキストを受け入れるのオーバーロードがない正当な理由はありますか?

string[] Split(string delimiter)

これは次のように使用できます

string input = "This - is - an - example";
string[] splitted = input.Split(" - ");
// results in:
//  { "This", "is", "an", "example" }

拡張メソッドを簡単に作成できることは本当にわかっていますが、これが追加されていない正当な理由があるに違いありません。

文字列区切り記号を使用して文字列を分割する方法の解決策を探しているのではなく、そのようなオーバーロードが問題を引き起こす可能性がある理由について説明を探していることに注意してください。これは、それが実際に問題を引き起こすとは思わないためであり、区切り文字としてstring[]シンプルではなく実際を渡さなければならない理由を初心者が理解するのは非常に難しいと思うからです。string

4

2 に答える 2

3

「String[]引数を指定してString.Split()を呼び出すときに、StringSplitOptionsパラメーターが必須なのはなぜですか?」という質問を微調整します。あなたの質問に対する答えを提供するかもしれません。

実際には、単一の文字を受け入れるString.Split()オーバーロードはないことに注意してください。オーバーロードはChar[]を取りますが、これはparams配列であるため、1文字で呼び出すことができ、暗黙的にChar[]にキャストされます。例えば

"1,2,3,4,5".Split(',');

同じSplit()オーバーロードを呼び出します

"1,2,3,4,5".Split(new[] { ',' });

String []の単一の引数を受け入れるSplit()のオーバーロードがあった場合、単一の文字列引数を渡すことでSplitを呼び出すことができます。

ただし、そのオーバーロードは存在せず、String[]をSplitに渡す場合はStringSplitOptionsが必須です。StringSplitOptionsが必須である理由については、理論化することしかできませんが、文字列で分割する場合、アルゴリズムが処理する複雑な分割の可能性が大幅に高まる可能性があります。これらの場合に期待される結果を提供するために、隣り合った複数の区切り文字を見つけるときのメソッドの動作を定義することが望ましいです。つまり、StringSplitOptionsは必須です。

過負荷になる可能性があると主張するかもしれませんが、Split(String, StringSplitOptions)上記の回答でIlya Ivanovが述べたように、どこかで停止する必要があり、単一の文字列を渡すための完全に良い方法があります。

于 2013-01-13T11:20:52.720 に答える
-2
string input = "This - is - an - example";
string[] splitted = Regex.Split(input," - ");
foreach (string word in splitted)
{
    MessageBox.Show(word);
}

それはスペースの問題だけでなく、あなたのstringセパレーターと完全に一致します、見てください

string input = "This,- is,- a,- complicated,- example";
string[] splitted = Regex.Split(input,",- ");
foreach (string word in splitted)
{
    MessageBox.Show(word);
}
于 2013-01-13T10:40:14.170 に答える