2013-12-16 18 views
13

Mam szybkie pytanie dotyczące ostrzeżenia otrzymanego z programu Resharper w Visual Studio na temat projektu C#, nad którym pracuję. Ostrzeżenie jest:Ostrzeżenie w programie Resharper "Wartość powrotna czystej metody nie jest używana"


"Return Value czystej metody nie służy"


Sposób gdzie to się dzieje jest jak poniżej:

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; 
    } 

Chyba wiem dlaczego ostrzeżenie się dzieje. Korzystam tylko z Path.GetFullPath (path) w celu przechwycenia wszystkich wyjątków związanych z nieprawidłowymi znakami. Ścieżka ma być dostarczona jako dane wejściowe przez użytkownika, dlatego w rzeczywistości nie używam wyniku (Path.GetFullPath (userInputPath)). Jedyne, co mogę dla niego zrobić, to sprawdzić, czy mam dla tej metody kontrolę, którą wykonuję na głównej metodzie, aby upewnić się, że dostarczona ścieżka nie jest pusta lub nie ma żadnych nieprawidłowych znaków.

miejsce gdzie użyciu powyższej metody jest następujący:

if (FilePathHasInvalidChars(inputDirectory)) 
     { 
      return; 
     } 

Zasadniczo isjust punkt wyjścia przed użyciem programu rozpoczyna wykonywanie nieprawidłową parametru. Błąkałem się, jeśli to ostrzeżenie spowodowałoby jakiekolwiek problemy lub jeśli nie przepuszczę metody Path.GetFullPath w sposób, który spowoduje problemy w przyszłości?

Wielkie dzięki, Jetnor.

Odpowiedz

18

Nie, to nie powinno sprawić Ci żadnych problemów, ponieważ tak naprawdę jest to sposób, w jaki chcesz z niego korzystać.

Wskazówka Resharper w tym przypadku jest tylko wskaźnikiem na wypadek, gdyby zapomniałeś utworzyć zmienną, w której przechowywane są dane, które pobrałeś. Ponieważ właśnie sprawdzasz i nie potrzebujesz tych danych, powinieneś być w porządku.

Edit: pamiętać, że można uniknąć wskazówkę, i było jasne, że jest to celowo stosując specjalny komentarz ReSharper, tak:

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

Edit # 2 :SynerCoder is probably right though, o System.IO.Directory.Exists() jest lepszym rozwiązaniem do określonego celu ...

+0

Thanks Kjartan. Chciałem tylko upewnić się, że wszystko jest w porządku. W tym przypadku rozkażę ostrzeżenie. : D – Jetnor

5

Nie powinieneś używać własnego metoda sprawdzania, czy ścieżka jest nielegalna. Ponieważ jesteś sprawdzanie katalog (inputDirectory) należy użyć następującego kodu:

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

Mogłem to zrobić. Powodem, dla którego tego nie robię, jest to, że używam tej metody do sprawdzania innej ścieżki, która nie istnieje, ale która jest tworzona poprzez Directory.CreateDirectory, dlatego jest to dobry sposób, w jaki znalazłem, aby sprawdzić wiele problemów ze ścieżką podaną przez użytkownika. – Jetnor

7

W kodzie przykładowym złapiesz Exception która może być jedną z następujących czynności: ArgumentException, SecurityException, ArgumentNullException, NotSupportedException, PathTooLongException, ale jeden, który jest zgłaszany, gdy ścieżka zawiera nieprawidłowe znaki, to tylko ArgumentExceptionMSDN.
Ponadto,

Używam Path.GetFullPath (path) tylko w celu przechwycenia wszystkich wyjątków związanych z nieprawidłowymi znakami.

należy raczej użyć następującego kodu, a pominąć obsługę wyjątków:

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

Cześć YuriY. Dzięki za wejście. Pierwotnie moim kodem był catch (ArgumentException). Ale po tym, jak zobaczyłem, że Path.GetFullPath wytworzył wszystkie inne wyjątki, o których wspomniałeś, postanowiłem je również złapać. W ten sposób mogę go wcześnie wychwycić, jeśli użytkownik poda pusty ciąg lub jeśli użytkownik chce coś zrobić tam, gdzie nie są dozwolone. :) – Jetnor

+0

Uzgodniono z Yuriy. Pomyślałem tylko o skrótowym kodzie funkcji Jurija: 'return userInputPath.IndexOfAny (Path.GetInvalidPathChars())> = 0? true: false' – RBT