是枚举所需的string.ToCharArray()吗?

时间:2011-04-27 23:24:53

标签: c# enumeration securestring

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

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

调用ToCharArray()对我没有意义。有人能告诉我这里是不是错了吗?

2 个答案:

答案 0 :(得分:6)

由于string实现IEnumerable<char>,因此在此上下文中没有必要。您需要ToCharArray的唯一时间是实际需要数组时。

我的猜测是,大多数致电ToCharArray的人都不知道string实施IEnumerable(即使据我所知,它仍然存在)。

答案 1 :(得分:1)

实际上这很糟糕,因为它

  • 枚举字符串
  • 创建一个包含所有字符副本的数组
  • 枚举

许多不必要的工作......

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

那是:

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

你不能:

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

如果你想进行枚举并希望在某些时候中断,通过使用toCharArray()已经枚举整个字符串nad制作了所有字符的副本。如果字符串非常大,那就太贵了......

相关问题