我特林測試,看是否有DirectoryInfo[]
包含目錄 我的代碼如下如果DirectoryInfo中包含目錄
對我來說這應該工作,但它似乎並不時它應該返回true 。任何想法,我做錯了什麼。
我特林測試,看是否有DirectoryInfo[]
包含目錄 我的代碼如下如果DirectoryInfo中包含目錄
對我來說這應該工作,但它似乎並不時它應該返回true 。任何想法,我做錯了什麼。
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(r => r.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
ContainsTestFolder = true;
}
你沒有得到想要的結果的原因是,包含比較對象的引用,而不是它的值。另外考慮使用Path.Combine而不是連接路徑。
@downvoter,關心評論? – Habib
您試圖比較兩個複雜對象,其中所有屬性不等於,只比較它們的FullName
屬性。
儘量使用謂詞使用FirstOrDefault
和比較目錄全名
FirstOrDefault
返回一個對象,如果發現null
如果沒有找到
DirectoryInfo[] test = dir.GetDirectories();
if (test.FirstOrDefault(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))) != null)
{
ContainsTestFolder = true;
}
您可以使用也Any
斷言它會返回一個bool
。
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(Path.Combine(dir.FullName,"Test_Folder"))))
{
ContainsTestFolder = true;
}
這個anwser是一個非常接近的第二,如果我可以給我2的upvotes也回答爲什麼我的代碼不起作用。但是Habib是第一個使用'.Any'的人,我看到了,我正在尋找返回一個bool –
沒有必要得到那個測試文件夾? – Aelios
你不能以這種方式測試它,因爲你正在檢查2個不同的對象,它們具有相同的一個屬性。
嘗試
DirectoryInfo[] test = dir.GetDirectories();
if (test.Any(x => x.FullName.Equals(dir.FullName +"\\"+ "Test_Folder")))
{
ContainsTestFolder = true;
}
檢查目錄狀態(如果它包含任何子目錄如)
if(test.length >0) { // Do you coding here }enter code here
您也可以使用。載如下:
var path = Directory.GetCurrentDirectory();
var ctf = Directory.GetDirectories(path).Contains(Path.Combine(path, "Test_Folder"));
這也完全避免需要DirectoryInfo
也許你可以檢查'test.Any(d => d.FullName == dir.FullName +「\\」+「Test_Folder」)' – V4Vendetta
值得注意的是,你不應該使用'dir.FullName +「\ \「+」Test_Folder「'當您可以輕鬆地完成'Path.Combine(dir.FullName,」Test_Folder「)'',因爲這是更合適的方式。 –