这是关于异常处理和预防的问题。
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
之前真的检查无效字符? 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性能提示(参见减少异常章节):
https://msdn.microsoft.com/en-us/library/ms973839.aspx
答案 0 :(得分:3)
这就是为什么我投票支持验证:
if (path1 == null)
return null;
if (path2 == null)
return null;
//TODO: put other validations here, e.g. Path.GetInvalidFileNameChars()
return System.IO.Path.Combine(path1, path2);
仅捕获例外案例的例外情况:
try {
// I can't validate this, since just after I've finished it and ready to read
// someone can
// - delete/rename the file
// - change permissions
// - lock file (e.g. start writing to it)
String data = File.ReadAllText(@"C:\MyData.txt");
...
}
catch (IOException e) {
...
}
答案 1 :(得分:2)
正如该术语所说,例外是为了处理意外情况。我投票预先处理代码中的可预见案例。
答案 2 :(得分:0)
例外可能会影响效果。
如果是API,
.content-section-b {
padding: 50px 0;
background-color: #3C5A78;
}
.carousel-control.left {
background-image:none;
}
.carousel-control.right {
background-image:none;
}
否则,德米特里的答案就行了。
有用的SO帖子: