我尝试创建文件夹中包含的文件列表及其属性。 该数组将包含文件的属性作为列标题。例如;
[Name, size, Path ]
[File A, 234, c:\temp ]
[File B, 632, c:\temp\a]
[File C, 3455, c:\temp\a]
我希望通过读取FileInfo类型的属性来读取每个文件的属性,而无需对属性名称进行硬编码。 所以这就是我所做的;
FileInfo[] files = IOUtil.GetFileList(); //<< returnes an array of FileInfo
//Get a list of public properties for the FileInfo type
Type t = typeof(FileInfo);
foreach (var p in t.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance))
{
Console.Write(p.Name);
// outputs names such as: Module, Assembly, RuntimeTypeHandle, MethodBase, Type, Type, String etc.
}
//loop through the files from FileInfo[] and read the attributes
foreach (FileInfo f in files){
foreach (var attr in f.GetType().GetProperties(BindingFlags.Public|BindingFlags.Instance))
{
Console.Write(attr.PropertyType.Name + ", "); //print the attribute names again
// outputs names such as: Name, Length, DirectoryName, Directory, IsReadOnly, Exists, FullName, Extension etc.
}
}
据我所知,在第一个foreach中,我获得了一个类型的属性,而在第二个中我获得了一个瞬间的属性,但是它们都不应该包含相同的属性吗?谁能解释为什么每个列表中的属性都不同?
答案 0 :(得分:0)
你有小错误或误解。在这里列举Type
:
Type t = typeof(FileInfo);
t.GetType().GetProperties(...)
在这里列举FileInfo
的属性:
FileInfo f = ...
f.GetType().GetProperties(...)
当然Type
不是对象本身,而是对...类型的描述。它们不一样 - 因为汽车的蓝图不是汽车。