2013-07-10 40 views
0
部分輸入StartsWith

想象我有這樣的代碼列表 - 使用LINQ

public List<string> X 

和我加載以下項目:

launch.txt
reset.txt
FOLDERNAME
otherfoldername

我知道我可以通過調用X.Contains(「value」)
來找到某個項目是否在該列表中,但是如果我通過「foldername/file.txt」,該怎麼辦?

檢查字符串是否以X列表中的任何條目開頭的最簡單方法是什麼? 理想情況下,我想捕捉「foldername/」和子目錄中的所有文件,所以我想用StartWith。

LINQ是正確的方法嗎?

+0

與論壇網站不同,我們不使用「謝謝」或「任何幫助表示讚賞」,或在[so]上簽名。請參閱「[應該'嗨','謝謝',標語和致敬從帖子中刪除?](http://meta.stackexchange.com/questions/2950/should-hi-thanks-taglines-and-salutations-be此外,FYI的術語是「預先感謝」,而不是「先進的感謝」。 –

+0

很快就會發布 - 是的,這是正確的做法 –

回答

3

使用Enumerable.Any擴展方法,當擴展方法返回true當且僅當序列中存在給定謂詞返回true的某個項目時。

string search = "foldername/file.txt"; 
bool result = X.Any(s => search.StartsWith(s)); 

當然,StartsWith可能實際上並不適合您的情況。如果X中只有一個名爲foldername2的文件夾會怎麼樣?在這種情況下,你不希望resulttrue,我懷疑。


如果你想在X搜索匹配的項目,你可以做到以下幾點。

string search = "foldername/file.txt"; 
IEnumerable<string> result = X.Where(s => search.StartsWith(s)); 

如果你想在X,搜索匹配的第一個項目,你可以做到以下幾點。

List<string> X = new List<string>(){ 
    "launch.txt","reset.txt","foldername","otherfoldername"  
}; 
string search = "foldername/file.tx"; 
var searchInfo = new 
{ 
    FileNameWoe = Path.GetFileNameWithoutExtension(search), 
    FileName = Path.GetFileName(search), 
    Directory = Path.GetDirectoryName(search) 
}; 

IEnumerable<String> matches = X.Select(x => new 
{ 
    str = x, 
    FileNameWoe = Path.GetFileNameWithoutExtension(x), 
    FileName = Path.GetFileName(x), 
    Directory = Path.GetDirectoryName(x) 
}).Where(xInfo => searchInfo.FileName == xInfo.FileNameWoe 
       || searchInfo.FileNameWoe == xInfo.FileName 
       || searchInfo.Directory == xInfo.Directory 
       || searchInfo.Directory == xInfo.FileNameWoe 
       || searchInfo.FileNameWoe == xInfo.Directory) 
.Select(xInfo => xInfo.str) 
.ToList(); 

發現:foldername,因爲一個文件名的FileNameWithoutExtension等於您要搜索的路徑的目錄

string search = "foldername/file.txt"; 
string result = X.FirstOrDefault(s => search.StartsWith(s)); 
+0

是的,事實上,我決定在每個文件夾的末尾加上一個「\」,以確保它能找到正確的一個。非常感謝。 –

+0

@Developer在你給出的例子中,搜索包含一個正斜槓,而不是反斜槓。 –

0

如果您正在使用的路徑擺弄周圍使用Path類。