2011-04-27 2 views
2

Почему на Земле кто-то преобразует строку в char [], прежде чем перечислять символы в ней? Регулярный шаблон для инициализации System.Security.SecureString нашел все вокруг сети следующим образом:Is string.ToCharArray() необходимо для перечисления?

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

Вызов ToCharArray() не имеет никакого смысла для меня. Может ли кто-нибудь сказать, я здесь неправ?

ответ

6

С string инвентарь IEnumerable<char>, в этом контексте нет необходимости. Единственный раз, когда вам нужно ToCharArray - это когда вам на самом деле нужен массив.

Мое предположение, что большинство людей, которые звонят ToCharArray, не знают, что string реализует 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/Форумы/en-CA/winserverpowershell/thread/4df7c4e6-bd5e-46b5-9a74-ac7c3d8c7314 Я был очень смущен тем, почему никто не оставил этот вызов ToCharArray. – wigy

+0

Многое может быть программированием культа. Люди видят, что другие делают это и никогда не расследуют, чтобы понять, почему это не нужно. – Gabe

1

На самом деле это плохо, потому что

  • перебирает на строку
  • создает массив с копией всех символов
  • перебирает на этом

Много ненужной работы. ..

Это потому, что строки неизменяемы и выдают указатель на его внутренний ar ray не допускается, поэтому ToCharArray() создает копию вместо трансляции.

То есть:

вы можете перечислить строку как полукокса [], но:

вы не можете:

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

Если бы перечисляя и хотели бы разбить на какой-то момент , используя toCharArray(), уже перечислил всю строку nad, сделав копию всех символов. Если строка будет очень большой, это довольно дорого ...