[英]What to use instead of Concat in string lists in C#
我有這些字符串列表
List<string> files = new List<string>
(System.Linq.Enumerable.Concat
(System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "*.*"),
System.IO.Directory.GetFiles(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), "*.pdf")));
我想重構代碼,我想使用比 concat 更高效或更快的東西。我該怎么做? 謝謝
要獲取所有文件的List<string>
,您可以編寫:
using System.IO;
using System.Linq;
string path = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var files = Directory.GetFiles(path, "*.*").ToList();
這將包括所有 PDF。
如果出於特殊目的不需要List<>
,則可以直接操作 GetFiles 的結果字符串數組:
string[] files = Directory.GetFiles(path, "*.*");
或者干脆:
var files = Directory.GetFiles(path, "*.*");
這將避免轉換為通用字符串列表所需的內存和時間。
您可以使用數組或列表訪問項目和循環 foreach,因為它們實現了 IEnumerable 並具有索引器。
列表僅在您需要輕松操作項目(例如添加和刪除)或出於任何原因需要 OOP 對象時才有用。
同樣按照@mjwills 的建議,您可以使用EnumerateFiles
而不是GetFiles
:第一次解析列表時,您無需等待完全填充,並且在大量文件的情況下最終不會出現延遲:
var files = Directory.EnumerateFiles(path, "*.*");
foreach (var filePath in files) ...
但是每次執行解析時它都會重新掃描系統文件,這僅在進行一次解析或需要實時解析時才有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.