2011-04-27 64 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製作了所有字符的副本。如果字符串會很大,那是相當昂貴的...