`System.IO.Path`应该具体吗?

时间:2009-08-20 23:05:34

标签: .net

Path类的成员Path.Combine是不可或缺的。它们可以生成出色,干净,正确的代码。不幸的是,如果你将它用于管理C ++预处理器中的标题路径之类的东西,你很快就会发现它在分析器中显示出比预期更多的东西。为什么呢?

  

异常:ArgumentException: path1 path2 包含GetInvalidPathChars中定义的一个或多个无效字符。

即使没有检查,combine命令也是O(n)(因为它必须复制字符串内容)。但是,这比检查任何GetInvalidPathChars'~40个成员的存在要便宜得多。

我相信Path类应该是一个不可变类型,它包含一个已知不包含任何无效字符的字符串。应提供静态成员以在string上运行(现在存在),并添加一个相同的集合以处理Path个对象。在.NET Framework中进行此更改:

  • 不是一个突破性的变化(将静态类更改为密封的混凝土类型是不会破坏的)
  • 显着提高了几项最佳实践操作的性能

评论

1 个答案:

答案 0 :(得分:2)

如果您不介意file://语法,Uri类可以提供这种功能。我认为.Net更喜欢Uri类的使用,因为它可以允许定位除本地文件之外的资源,尽管这需要额外的工作来支持它。