到目前爲止,我有以下幾點:簡化的邏輯,以避免重複錯誤信息
// Gets all the drives
DriveInfo[] allDrives = DriveInfo.GetDrives();
// checks if any CD-Rom exists in the drives
var cdRomExists = allDrives.Any(x => x.DriveType == DriveType.CDRom);
// Get all the cd roms
var cdRoms = allDrives.Where(x=>x.DriveType==DriveType.CDRom);
if (cdRomExists.Equals(true))
{
// Loop through the cd roms collection
foreach(var cdRom in cdRoms)
{
Console.WriteLine("Drive {0}", cdRom.Name);
Console.WriteLine(" File type: {0}", cdRom.DriveType);
if (cdRom.IsReady == true)
{
if (cdRom.DriveType == DriveType.CDRom)
{
DirectoryInfo di = new DirectoryInfo(cdRom.RootDirectory.Name);
var file = di.GetFiles("*.csv", SearchOption.AllDirectories).FirstOrDefault();
if (file == null)
{
errorwindow.Message = LanguageResources.Resource.File_Not_Found;
dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
}
else
{
foreach (FileInfo info in di.GetFiles("*.csv", SearchOption.AllDirectories))
{
Debug.Print(info.FullName);
ImportCSV(info.FullName);
break; // only looking for the first one
}
}
}
}
else if (cdRom.IsReady == false)
{
errorwindow.Message = LanguageResources.Resource.CDRom_Not_Ready;
dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
}
}
}
else
{
errorwindow.Message = LanguageResources.Resource.CDRom_Error;
dialogService.ShowDialog(LanguageResources.Resource.Error, errorWindow);
}
有以下的問題,錯誤消息連續彈出兩次,表示如果沒有CD-ROM中驅動器,因爲我的電腦同時包含DVD和藍光驅動器。如果有一個包含CSV文件的CD Rom,它會成功導入,但由於運行到藍光驅動器的foreach循環會彈出另一條消息,並彈出。
我只想顯示一個錯誤消息,對於這些情況: - 如果沒有光盤是準備幷包含在驅動 - 如果光驅CSV不包含CSV
我認爲我的邏輯過於複雜,我需要幫助調整我的邏輯陳述。
使用'break'如果沒有csv文件發生一些錯誤(在MessageBox之後)。 –
如果將原始查詢調整爲僅將已準備就緒的驅動器撤回,則可能會更容易。你也不需要'Any()'和'Where()'調用;如果沒有這樣的驅動器,那麼'Where()'將返回一個長度爲0的序列,您可以事先對其進行測試,或者只是對序列進行迭代,因爲對空序列不做任何處理。 – barrick