Предупреждение в Resharper "Возвращаемое значение чистого метода не используется"
У меня есть быстрый вопрос, касающийся предупреждения, которое я получаю от Resharper в Visual Studio для проекта на С#, над которым я работаю. Предупреждение:
"Возвращаемое значение чистого метода не используется"
Метод, где это происходит, выглядит следующим образом:
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)
. Единственное использование, которое я использую для этого, - проверка того, что я использую для этого метода, - проверка того, что я делаю для основного метода, чтобы убедиться, что указанный путь не пустой или не содержит недопустимых символов.
Место, где я использую описанный выше метод, указано ниже:
if (FilePathHasInvalidChars(inputDirectory))
{
return;
}
По сути, это всего лишь точка выхода перед началом выполнения программы с использованием недопустимого параметра.
Мне было интересно, не вызовет ли это предупреждение какие-либо проблемы, или я неправильно использую метод Path.GetFullPath
таким образом, который вызовет у меня проблемы в будущем?
Ответы
Ответ 1
Нет, это не должно вызывать никаких проблем для вас, так как это на самом деле то, как вы хотите его использовать.
Подсказка Resharper в этом случае является указателем только в том случае, если вы забыли создать переменную, в которой сохраняются данные, которые вы извлекли. Поскольку вы просто проверяете и на самом деле не нуждаетесь в данных, вы должны быть в порядке.
Изменить: Обратите внимание, что вы можете избежать подсказки и пояснить, что это специально, используя специальный комментарий Resharper, например:
// ReSharper disable once ReturnValueOfPureMethodIsNotUsed
Path.GetFullPath(userInputPath);
Изменить # 2: SynerCoder, вероятно, прав, хотя, о System.IO.Directory.Exists()
является лучшим вариантом для вашей конкретной цели...
Ответ 2
В вашем примере кода вы ловите Exception
, который может быть любым из следующих: ArgumentException
, SecurityException
, ArgumentNullException
, NotSupportedException
, PathTooLongException
, но тот, который бросается, когда путь содержит Недопустимые символы - это ArgumentException
MSDN.
Кроме того,
Я использую Path.GetFullPath(путь) только для того, чтобы улавливать все исключения, чтобы делать с недопустимыми символами.
вам следует использовать следующий код и опустить обработку исключений:
foreach (char invalidChar in Path.GetInvalidPathChars())
{
if (userInputPath.Contains(invalidChar))
{
return true;
}
}
return false;
Ответ 3
Вы не должны использовать свой собственный метод для проверки того, является ли путь незаконным. Поскольку вы проверяете каталог (inputDirectory
), вы должны использовать следующий код:
if (!System.IO.Directory.Exists(inputDirectory))
{
return;
}