Ich würde für das erste Szenario versuchen:
//Declare logger type
private readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
Process.GetProcesses()
.Where(p => {
try {
var x = p.MainModule;
return true;
}
catch(Win32Exception e2)
{ IgnoreError(); }
})
.Select(p => p.MainModule.FileName)
public static void IgnoreError(Exception e)
{
#if DEBUG
throw e2;
//Save the error track, I prefer log4net
_log.Info("Something bad happened!");
#end if
}
Und für das zweite Szenario, würde ich eher lieber eine IF und speichern Sie das Protokoll verwenden:
//Somewhere in the begging of your class, in a place whose name I do not care to remember ...
//Declare logger type
private readonly ILog _log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
public List<string> VolumenLabels()
{
//Return the List<T>
List<string> myVolumeLabels = new List<string>();
//Getting the info
DriveInfo[] allDrives = DriveInfo.GetDrives();
foreach(DriveInfo drive in allDrives)
{
if (drive.IsReady == true)
{
myVolumeLabels.Add(drive.VolumeLabel.ToString());
}
else
{
_log.Info("Check the Drive: " + drive.Name + " the device is not ready.");
}
}
return myVolumeLabels;
}
Ich hoffe, ich habe ein wenig geholfen ... einen schönen Tag!
+1 Ich mag es! Es sieht auch ziemlich generisch aus, gut gemacht. (Ich warte eine Weile, um andere Antworten zu überprüfen) –
Ich würde vorschlagen, etwas wie 'try {yield return selector (item); } catch {} ', wodurch" value "und" continue "überflüssig werden. – NetMage
@NetMage Sie können keinen Wert innerhalb eines "try" -Blocks "errechnen". –