【问题标题】:Warning in Resharper "Return value of pure method is not used"Resharper 中的警告“未使用纯方法的返回值”
【发布时间】: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 方法会在将来给我带来问题?

【问题讨论】:

    标签: c# .net path directory resharper


    【解决方案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 创建的路径,因此这是我发现检查用户提供的路径的多个问题的好方法。
    猜你喜欢
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-04
    • 1970-01-01
    • 2014-05-15
    • 2011-02-16
    • 2016-06-12
    • 2015-06-24
    相关资源
    最近更新 更多