2

为什么在地球上有人会在枚举其中的字符之前将字符串转换为 char[] ?在网上找到的初始化 System.Security.SecureString 的常规模式如下:

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

调用 ToCharArray() 对我来说毫无意义。有人可以告诉我这里是否错了吗?

4

2 回答 2

6

由于stringimplements IEnumerable<char>,因此在这种情况下没有必要。您唯一需要ToCharArray的是当您真正需要一个数组时。

我的猜测是大多数打电话的ToCharArray人都不知道那个string工具IEnumerable(尽管据我所知它总是有)。

于 2011-04-27T23:27:38.697 回答
1

实际上这很糟糕,因为它

  • 枚举字符串
  • 创建一个包含所有字符副本的数组
  • 对此进行了列举

很多不必要的工作...

这是因为字符串是不可变的,并且不允许给出指向其内部数组的指针,因此 ToCharArray() 会生成副本而不是强制转换。

那是:

您可以将字符串枚举为 char[] 但是:

你不能:

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

如果您要枚举并希望在某个时候中断,则使用 toCharArray() 已经枚举了整个字符串并复制了所有字符。如果字符串非常大,那是相当昂贵的......

于 2011-04-27T23:36:42.713 回答