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 是一个空字符串。
我刚刚注意到 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 是一个空字符串。