我有一个关于我正在使用Visual Studio中的Resharper在我工作的c#项目上发出警告的快速问题。警告是:
“不使用纯方法的返回值”
发生这种情况的方法如下:
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)
仅用于捕获与无效字符有关的所有异常。该路径将由用户提供输入,因此我实际上并未使用Path.GetFullPath(userInputPath)
的结果。我对它的唯一用途是检查我对此方法的检查是在主方法上进行的检查,以确保提供的路径不为空或没有任何无效字符。
我使用上述方法的地方如下:
if (FilePathHasInvalidChars(inputDirectory))
{
return;
}
基本上它只是程序在使用无效参数开始执行之前的退出点。
我想知道这个警告是否会引起任何问题,或者我是否会以某种方式滥用Path.GetFullPath
方法会导致我将来出现问题?
答案 0 :(得分:18)
不,这不应该对你造成任何问题,因为这实际上是你想要如何使用它。
在这种情况下,Resharper提示只是一个指针,以防您忘记创建一个变量来保存您提取的数据。由于您只是在验证,并且实际上并不需要这些数据,因此您应该没问题。
编辑请注意,您可以避免提示,并通过使用特定的Resharper评论明确说明这是有目的的,如下所示:
// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
Path.GetFullPath(userInputPath);
编辑#2: SynerCoder is probably right though,关于System.IO.Directory.Exists()
是您出于特定目的的更好选择......
答案 1 :(得分:7)
在您的示例代码中,您可以捕获Exception
,其中可以是以下任意一项:ArgumentException
,SecurityException
,ArgumentNullException
,NotSupportedException
,{{1} },但路径包含无效字符时抛出的那个只有PathTooLongException
MSDN
此外,
我正在使用Path.GetFullPath(path)仅用于捕获与无效字符有关的所有异常。
您应该使用以下代码,并省略异常处理:
ArgumentException
答案 2 :(得分:5)
您不应使用自己的方法来检查路径是否非法。由于您正在检查目录(inputDirectory
),因此应使用以下代码:
if (!System.IO.Directory.Exists(inputDirectory))
{
return;
}