2

いったいなぜ誰かが文字列を列挙する前に文字列を char[] に変換するのでしょうか? ネット全体で見られる System.Security.SecureString を初期化するための通常のパターンは次のとおりです。

SecureString secureString = new SecureString();
foreach (char c in "fizzbuzz".ToCharArray())
{
    secureString.AppendChar(c);
}

ToCharArray() を呼び出しても意味がありません。ここで私が間違っているかどうかを誰かに教えてもらえますか?

4

2 に答える 2

6

stringを実装しているためIEnumerable<char>、このコンテキストでは必要ありません。必要なのは、実際に配列が必要なToCharArrayときだけです。

私の推測では、呼び出しを行うほとんどの人は、それが実装されToCharArrayていることを知りません(私が知っている限りでは常にそうなっていますが)。stringIEnumerable

于 2011-04-27T23:27:38.697 に答える
1

実際、それは悪いことです。

  • 文字列を列挙します
  • すべての文字のコピーで配列を作成します
  • それを列挙する

無駄な作業が多い…

これは、文字列が不変であり、その内部配列へのポインターを与えることが許可されていないためです。そのため、ToCharArray() はキャストではなくコピーを作成します。

あれは:

文字列を char[] として列挙できますが、

それはいけません:

var chars = (char[])"string";

列挙を行って、ある時点で中断したい場合、 toCharArray() を使用すると、文字列全体が既に列挙されており、すべての文字のコピーが作成されています。文字列が非常に大きい場合、それは非常に高価です...

于 2011-04-27T23:36:42.713 に答える