2015-02-05 40 views
0

我有一個ZipArchive,它有一堆文件。我正在嘗試獲取所有文件格式爲.stl的文件,但我似乎無法正確使用它。嘗試使用linq將包含.stl的文件添加到列表中

以下是我有:

var scan = import.ZipFile.Entries.Any(e => e.Name == string.Format("*.stl").ToList()); 

我相信,我失去了一些東西愚蠢,但我不斷收到錯誤:

operator '==' cannot be applied to operands of type 'string' and 
'system.collections.generic.list<char>' 

會有人能幫助我嗎?

+1

你放錯了'()'。它應該是:'var scan = import.ZipFile.Entries.Any(e => e.Name == string.Format(「*。stl」))。ToList();',但是你會得到一個'List '回來,你可能需要'Where'。你的比較也不行。你需要比較擴展名,使用'Path.GetExtension'方法。 – Habib 2015-02-05 15:44:41

回答

1

您需要:

var scan = import.ZipFile.Entries 
        .Where(e => Path.GetExtension(e.Name).Equals(".stl", StringComparison.InvariantCultureIgnoreCase)) 
        .ToList(); 

你遺失了()。這導致了字符串和字符列表之間的比較,<string>.ToList將返回List<char>。這可能是:

var scan = import.ZipFile.Entries.Any(e => e.Name == string.Format("*.stl")).ToList(); 

你會得到一個List<bool>回來,你需要Enumerable.Where條款。

更重要的是,您的比較e.Name == string.Format("*.stl")將無法​​正常工作。您需要比較擴展名,請使用Path.GetExtension方法。您的比較是使用通配符Directory.GetFiles或命令提示符使用的通配符,但不能在C#中使用string比較。

+0

如何知道參賽作品是列表? – fubo 2015-02-05 15:51:56

+0

@fubo,不,我不是你是對的,不應該。 – Habib 2015-02-05 15:52:17

+0

謝謝。我最終只是想通過linq文檔瞭解這一點。我到達了類似的答案,但這是最接近我使用哪個是'var scan = import.ZipFile.Entries.Where(e => e.Name.Contains(「。stl」))。ToList();' 。再次感謝! – scapegoat17 2015-02-05 15:58:43

1

Any返回一個布爾值 - 我想你想獲得所有項目的列表?

var scan = import.ZipFile.Entries.Where(e => e.Name.EndsWith(".stl", StringComparison.InvariantCultureIgnoreCase)).ToList(); 
相關問題