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,它可以是以下任何一种:ArgumentExceptionSecurityExceptionArgumentNullExceptionNotSupportedExceptionPathTooLongException,但是当路径包含无效字符只有ArgumentExceptionMSDN。 此外,

我使用 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()) &gt;= 0 ? true : false【参考方案3】:

您不应该使用自己的方法来检查路径是否非法。由于您正在检查一个目录 (inputDirectory),您应该使用以下代码:

if (!System.IO.Directory.Exists(inputDirectory))

    return;

【讨论】:

我能做到。我不这样做的原因是因为我使用此方法来验证另一个不存在但通过 Directory.CreateDirectory 创建的路径,因此这是我发现检查用户提供的路径的多个问题的好方法。

以上是关于Resharper 中的警告“未使用纯方法的返回值”的主要内容,如果未能解决你的问题,请参考以下文章

来自 ReSharper 的“从不使用自动属性访问器”警告

如何修复:在闭包 resharper 警告中访问 foreach 变量?

ReSharper 警告:“泛型类型的静态字段”

Resharper 警告空字符串 (System.NullReferenceException)

重载的方法在 Resharper 中给出“带有可选参数的方法被重载隐藏”警告

ReSharper 和规则集文件