DirectoryInfo.Extension - 为什么会这样?

DirectoryInfo.Extension - Why does this exist?

我刚刚注意到 DirectoryInfo class 有 Extension 属性,继承自 FileSystemInfo。我很困惑为什么这是基础 class 的一部分,而不是仅在 FileInfo class 中声明和实现。也就是说,由于目录没有扩展名,这似乎是一个奇怪的设计决定。

此外,我刚刚使用 DirectoryInfo 实例并注意到 Extension 属性 似乎相当随意。它似乎是文件夹的原始名称(不是当前名称),已转换为小写。例如,假设我有一个最初名为 MyCoolFolder 的文件夹。后来,我把名字改成了MyGoodFolder。根据我所见,DirectoryInfo.Extension 属性 可能会读作 .mycoolfolder。为什么?在 DirectoryInfo 上使用 Extension 属性 有什么用处,将原始名称小写有什么用处?

这只是这个对象层次结构的一个设计缺陷。

如果觉得不好看(只留下相关代码):

public abstract class Array : IList
{
  int IList.Add(object value)
  {
    throw new NotSupportedException(Environment.GetResourceString("NotSupported_FixedSizeCollection"));
  }
}

接受 .net 框架设计者也会犯错误,并且在广泛使用的 API 中犯的错误即使不是不可能修复也很难,因为向后兼容性通常具有更高的优先级。

拥有一个带有“扩展名”的目录似乎是有效的。它在文件系统和 .NET 中都是允许的。在这种情况下,我认为 Extension 属性 的行为是正确的。也就是说,除了以句点(.git、.vs 等)开头的“隐藏”目录外,我从未见过带有扩展名的目录。

示例:

var dir = Directory.CreateDirectory(@"c:\temp.txt");
Console.WriteLine(dir.Exists); //True
Console.WriteLine(dir.Extension); //.txt

此外,我应该指出 OP 假设的关于 Extension 如何工作的行为是不正确的(不确定他们为什么不只是测试...) Extension 寻找一个句点和return是句点及其后的所有内容。对于没有句点扩展名的目录名称,return 是一个空字符串。