2011-04-27 67 views
2

在枚举字符之前,为什么有人会将字符串转换为char []?用于初始化为System.Security.SecureString的规律发现周围所有的净如下:是否需要枚举string.ToCharArray()?

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

调用ToCharArray()是没有意义的我。有人可以告诉我在这里是否错了吗?

回答

6

由于string执行IEnumerable<char>,在这种情况下它不是必需的。你唯一需要的时候是ToCharArray是你实际上需要一个数组。

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

+0

谢谢。阅读http://stackoverflow.com/questions/2420122/using-securestring和http://www.codekeep.net/snippets/8a3b075c-d74d-43ee-8937-1136289751de.aspx和http://social.technet.microsoft .com/Forums/en-CA/winserverpowershell/thread/4df7c4e6-bd5e-46b5-9a74-ac7c3d8c7314我真的很困惑为什么没有人忽略这个ToCharArray调用。 – wigy 2011-04-28 00:05:24

+0

很多它可能是货物崇拜编程。人们看到其他人这样做,而且从未调查过,以了解为什么没有必要。 – Gabe 2011-04-28 00:07:50

1

其实这是不好的,因为它

  • 列举了串
  • 所有字符
  • 的副本创建一个阵列上

列举了许多不必要的工作。 ..

这是因为字符串是不可变的,并给出一个指向它的内部ar ray是不允许的,所以ToCharArray()做一个副本而不是一个强制转换。

即:

你可以枚举一个字符串作为一个char [],但:

不能:

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

如果你会去枚举,并希望在某个时候突破,通过使用toCharArray()将已经枚举了整个字符串nad制作了所有字符的副本。如果字符串会很大,那是相当昂贵的...