类型的不同属性列表和同一对象的瞬间?

时间:2014-04-25 13:13:31

标签: c# properties foreach

我尝试创建文件夹中包含的文件列表及其属性。 该数组将包含文件的属性作为列标题。例如;

[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中,我获得了一个类型的属性,而在第二个中我获得了一个瞬间的属性,但是它们都不应该包含相同的属性吗?谁能解释为什么每个列表中的属性都不同?

1 个答案:

答案 0 :(得分:0)

你有小错误或误解。在这里列举Type

的属性
Type t = typeof(FileInfo);
t.GetType().GetProperties(...)

在这里列举FileInfo的属性:

FileInfo f = ...
f.GetType().GetProperties(...)

当然Type不是对象本身,而是对...类型的描述。它们不一样 - 因为汽车的蓝图不是汽车。