2013-12-16 34 views
13

我有一個關於在Visual Studio中從Resharper獲取的警告的快速問題,這是我正在使用的一個c#項目。該警告是:Resharper中的警告「不使用純方法的返回值」


「不使用純方法的返回值」


哪裏出現這種情況的方法如下:

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

我想我知道爲什麼警告正在發生。 我正在使用Path.GetFullPath(路徑)僅用於捕獲所有異常以處理無效字符。該路徑將作爲用戶輸入提供,因此我實際上不使用(Path.GetFullPath(userInputPath))的結果。我對它的唯一用處是檢查我對這個方法的檢查是否在主要方法上執行,以確保提供的路徑不爲空或沒有任何無效字符。

的地方,我使用上面的方法如下:

if (FilePathHasInvalidChars(inputDirectory)) 
     { 
      return; 
     } 

基本上它isjust出口點使用無效參數的程序開始執行之前。 如果這個警告會導致任何問題,或者如果我以一種會導致我未來出現問題的方式錯過Path.GetFullPath方法,那麼我在徘徊?

非常感謝, 捷特諾。

回答

18

不,不應該爲你造成任何問題,因爲這實際上是你想要使用它的方式。

在這種情況下,Resharper提示只是一個指針,以防您忘記創建一個變量來保存您獲取的數據。既然你只是驗證,並沒有真正需要這些數據,你應該沒問題。

編輯:注意,就可以避免提示,並明確這是故意通過使用特定ReSharper的評論,就像這樣:

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

編輯#2 :SynerCoder is probably right though,約爲System.IO.Directory.Exists()是您的特定用途的更好選擇...

+0

感謝Kjartan。只是想確保它沒問題。在這種情況下,我會解除警告。 :D – Jetnor

5

您不應該使用自己的檢查路徑是否非法的方法。既然你正在檢查一個目錄(inputDirectory),你應該使用下面的代碼:

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

我可以做到這一點。我沒有這樣做的原因是因爲我使用這種方法來驗證另一個不存在但是通過Directory.CreateDirectory創建的路徑,因此這是一個很好的方式,我發現用用戶提供的路徑來檢查多個問題。 – Jetnor

7

在你的示例代碼,你趕上Exception它可以是下列任何一項:ArgumentExceptionSecurityExceptionArgumentNullExceptionNotSupportedExceptionPathTooLongException,但當路徑包含無效字符時拋出的只有ArgumentExceptionMSDN
此外,

我正在使用路徑。GetFullPath(路徑)僅用於捕獲所有異常以處理無效字符。

你倒是應該使用下面的代碼,並且省略了異常處理:

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

你好YuriY。感謝您的意見。最初我的代碼是catch(ArgumentException)。但是當我看到Path.GetFullPath產生了你提到的所有其他異常之後,我決定也抓住它們。通過這種方式,如果用戶提供空字符串,或者用戶希望在不允許的情況下執行某些操作,則可以儘早捕獲它。 :) – Jetnor

+0

同意Yuriy。我只想到Yuriy的函數代碼的簡寫: 'return userInputPath.IndexOfAny(Path.GetInvalidPathChars())> = 0? true:false' – RBT