2013-12-16 9 views
13

Ich habe eine kurze Frage bezüglich einer Warnung, die ich von Resharper in Visual Studio auf einem C# -Projekt bekomme, das ich arbeite. Die Warnung ist:Warnung in Resharper "Rückgabewert der reinen Methode wird nicht verwendet"


„Rückgabewert der reinen Methode nicht verwendet wird“


Das Verfahren, bei dem dies geschieht, ist wie folgt:

private static bool FilePathHasInvalidChars(string userInputPath) 
    { 
     try 
     { 
      Path.GetFullPath(userInputPath);//this is where the warning appears 

     } 
     catch (Exception e) 
     { 
      Log.Error(String.Format(
       "The Program failed to run due to invalid characters or empty string value for the Input Directory. Full Path : <{0}>. Error Message : {1}.", 
       userInputPath, e.Message), e); 
      return true; 

     } 
     return false; 
    } 

Ich glaube, ich weiß, warum Die Warnung ist passiert. Ich verwende Path.GetFullPath (Pfad) nur für den Zweck alle Ausnahmen mit ungültigen Zeichen abzufangen. Der Pfad muss vom Benutzer als Eingabe angegeben werden, daher verwende ich nicht das Ergebnis von (Path.GetFullPath (userInputPath)). Die einzige Verwendung, die ich dafür habe, ist eine Überprüfung, die ich für diese Methode auf einer Überprüfung habe, die ich auf der Hauptmethode mache, um sicherzustellen, dass der angegebene Pfad nicht leer ist oder keine ungültigen Zeichen enthält.

Ort, wo ich das obige Verfahren verwenden, ist wie folgt:

if (FilePathHasInvalidChars(inputDirectory)) 
     { 
      return; 
     } 

Im Grunde ist es eine Austrittspunkt isjust vor einen ungültigen Parameter Ausführung unter Verwendung von Programm beginnt. Ich war am Wandern, wenn diese Warnung irgendwelche Probleme verursachen würde, oder wenn ich die Path.GetFullPath-Methode in einer Weise missbrauche, die mir in der Zukunft Probleme verursachen wird?

Vielen Dank, Jetnor.

Antwort

18

Nein, das sollte keine Probleme für Sie verursachen, da dies in der Tat ist, wie Sie es verwenden möchten.

Der Resharper-Hinweis ist in diesem Fall nur ein Hinweis, wenn Sie vergessen haben, eine Variable zu erstellen, in der die abgerufenen Daten gespeichert werden. Da Sie nur diese Daten validieren und nicht wirklich benötigen, sollten Sie in Ordnung sein.

Edit: Beachten Sie, dass Sie den Hinweis vermeiden können, und machen deutlich, dass dies absichtlich durch einen bestimmten ReSharper Kommentar verwenden, wie folgt aus:

// ReSharper disable once ReturnValueOfPureMethodIsNotUsed 
Path.GetFullPath(userInputPath); 

Edit # 2 :SynerCoder is probably right though, über System.IO.Directory.Exists() ist eine bessere Option für Ihren speziellen Zweck ...

+0

Dank Kjartan. Ich wollte nur sicherstellen, dass es in Ordnung ist. Ich werde die Warnung in diesem Fall aufheben. : D – Jetnor

5

Sie sollten nicht Ihre eigenen verwenden Methode zur Überprüfung, ob der Pfad illegal ist. Da Sie ein Verzeichnis (inputDirectory) Prüfen, sollten Sie den folgenden Code verwenden:

if (!System.IO.Directory.Exists(inputDirectory)) 
{ 
    return; 
} 
+2

könnte ich das tun. Der Grund, warum ich es nicht mache, ist, weil ich diese Methode verwende, um einen anderen Pfad zu validieren, der nicht existiert, der aber über Directory.CreateDirectory erstellt wird. Dies ist ein guter Weg, mehrere Probleme mit einem Pfad zu überprüfen. – Jetnor

7

In Ihrem Beispielcode fangen Sie Exception, die eine der folgenden sein kann: ArgumentException, SecurityException, ArgumentNullException, NotSupportedException, PathTooLongException, aber die Eine, die geworfen wird, wenn der Pfad ungültige Zeichen enthält, ist nur ArgumentExceptionMSDN.
Außerdem

Ich benutze Pfad.GetFullPath (Pfad) nur zum Abfangen aller Ausnahmen mit ungültigen Zeichen.

Sie sollten vielmehr den folgenden Code verwenden, und lassen Sie die Ausnahmebehandlung:

foreach (char invalidChar in Path.GetInvalidPathChars()) 
{ 
    if (userInputPath.Contains(invalidChar)) 
    { 
     return true; 
    } 
} 
return false; 
+0

Hallo YuriY. Danke für die Eingabe. Ursprünglich war mein Code catch (ArgumentException). Aber nachdem ich gesehen habe, dass der Path.GetFullPath alle anderen Ausnahmen, die du erwähnt hast, produziert habe, habe ich beschlossen, sie auch zu fangen. Auf diese Weise kann ich es früh fangen, wenn ein Benutzer eine leere Zeichenfolge bereitstellt oder wenn ein Benutzer etwas tun möchte, wo er nicht erlaubt ist. :) – Jetnor

+0

Mit Yuriy einverstanden. Ich dachte nur an eine Abkürzung für Yuriys Funktionscode: 'return userInputPath.IndexOfAny (Path.GetInvalidPathChars())> = 0? wahr: falsch " – RBT

Verwandte Themen