Это вопрос об обработке и предотвращении исключений.C# Исключить или проверить параметры заранее
public static string PathCombineNoEx(string path1, string path2)
{
if (path1 == null || path2 == null /*Either validate here*/)
{
return null;
}
try
{
return System.IO.Path.Combine(path1, path2);
}
catch (ArgumentException /*or catch here*/)
{
return null;
}
}
Поскольку исключения огромный удар по производительности, мы должны попытаться свести к минимуму возможность для исключения быть выброшен. В следующем примере я исключил вероятность того, что Path.Combine
может выбросить ArgumentnullException
. Это было очень легко сделать и почти никак не влияет на производительность. Однако Path.Combine
также выбрасывает ArgumentException
, если одна из двух строк параметров содержит любой недопустимый символ, предоставленный GetInvalidPathChars
.
- Теперь вы бы рекомендовали поймать это, как я, или вы действительно проверили бы наличие недопустимых символов перед вызовом
Path.Combine
? - Об общей рекомендации, которая может быть применена к большинству ситуаций.
- Возможно, есть статья Microsoft об этом?
Path.Combine
документация:
https://msdn.microsoft.com/de-de/library/fyy7a5kt(v=vs.110).aspx
В .NET Ссылка Источник:
http://referencesource.microsoft.com/#mscorlib/system/io/path.cs,2d7263f86a526264
Microsft наконечник производительности (глава Throw меньше исключений):
https://msdn.microsoft.com/en-us/library/ms973839.aspx
@ Ноэль Видмера: Да я не сделал * поймать * '' ArgumentException' из Path.Combine': вместо этого, я предлагаю проверки: проверка для 'Path.GetInvalidFileNameChars()', 'Path.GetInvalidPathChars()' и другие, если требуется –
Я знаю, как это сделать. Просто хотел знать, все ли вы это подтвердите. спасибо :) –