Resharper 中的警告“未使用纯方法的返回值”
Posted
技术标签:
【中文标题】Resharper 中的警告“未使用纯方法的返回值”【英文标题】:Warning in Resharper "Return value of pure method is not used" 【发布时间】:2014-01-03 13:18:40 【问题描述】:我有一个简短的问题,关于我从 Visual Studio 中的 Resharper 收到的关于我正在工作的 c# 项目的警告。警告是:
"未使用纯方法的返回值"
发生这种情况的方法如下:
private static bool FilePathHasInvalidChars(string userInputPath)
try
//this is where the warning occurs:
Path.GetFullPath(userInputPath);
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)
只是为了捕获与无效字符有关的所有异常。该路径将由用户作为输入提供,因此我实际上并未使用Path.GetFullPath(userInputPath)
的结果。我对它的唯一用途是检查我对此方法的检查是检查我对 main 方法所做的检查,以确保提供的路径不为空或没有任何无效字符。
我使用上述方法的地方如下:
if (FilePathHasInvalidChars(inputDirectory))
return;
基本上它只是程序使用无效参数开始执行之前的退出点。
我想知道这个警告是否会导致任何问题,或者我是否滥用Path.GetFullPath
方法会在将来给我带来问题?
【问题讨论】:
【参考方案1】:不,这不会给您带来任何问题,因为这实际上是您想要使用它的方式。
在这种情况下,Resharper 提示只是一个指针,以防您忘记创建一个变量来保存您获取的数据。由于您只是在验证,实际上并不需要这些数据,所以应该没问题。
编辑:请注意,您可以避免提示,并通过使用特定的 Resharper 评论明确说明这是故意的,如下所示:
// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
Path.GetFullPath(userInputPath);
编辑 #2: SynerCoder is probably right though,关于 System.IO.Directory.Exists()
是您特定目的的更好选择...
【讨论】:
感谢 Kjartan。只是想确保它没问题。在这种情况下,我将禁用警告。 :D【参考方案2】:在您的示例代码中,您捕获了Exception
,它可以是以下任何一种:ArgumentException
、SecurityException
、ArgumentNullException
、NotSupportedException
、PathTooLongException
,但是当路径包含无效字符只有ArgumentException
MSDN。
此外,
我使用 Path.GetFullPath(path) 只是为了捕获与无效字符有关的所有异常。
您应该使用以下代码,并省略异常处理:
foreach (char invalidChar in Path.GetInvalidPathChars())
if (userInputPath.Contains(invalidChar))
return true;
return false;
【讨论】:
你好尤里。感谢您的输入。最初我的代码是 catch (ArgumentException)。但是在我看到 Path.GetFullPath 产生了你提到的所有其他异常之后,我决定也捕获它们。这样,如果用户提供了一个空字符串,或者如果用户想要做一些他们不允许做的事情,我可以及早发现它。 :) 同意尤里。我只是想到了 Yuriy 的函数代码的简写:return userInputPath.IndexOfAny(Path.GetInvalidPathChars()) >= 0 ? true : false
【参考方案3】:
您不应该使用自己的方法来检查路径是否非法。由于您正在检查一个目录 (inputDirectory
),您应该使用以下代码:
if (!System.IO.Directory.Exists(inputDirectory))
return;
【讨论】:
我能做到。我不这样做的原因是因为我使用此方法来验证另一个不存在但通过 Directory.CreateDirectory 创建的路径,因此这是我发现检查用户提供的路径的多个问题的好方法。以上是关于Resharper 中的警告“未使用纯方法的返回值”的主要内容,如果未能解决你的问题,请参考以下文章
如何修复:在闭包 resharper 警告中访问 foreach 变量?
Resharper 警告空字符串 (System.NullReferenceException)