Reflection ent lib`源代码5.0中MapBuilder.cs中的getproperty和getproperties

Reflection ent lib`源代码5.0中MapBuilder.cs中的getproperty和getproperties,reflection,enterprise-library,getproperties,Reflection,Enterprise Library,Getproperties,我阅读了entlib5.0中的MapBuilder.cs源代码 有些代码对我来说太奇怪了,我就是不知道这样做的目的是什么: public static IMapBuilderContext<TResult> MapAllProperties() { IMapBuilderContext<TResult> context = new MapBuilderContext(); var properties = from property i

我阅读了entlib5.0中的MapBuilder.cs源代码

有些代码对我来说太奇怪了,我就是不知道这样做的目的是什么:

public static IMapBuilderContext<TResult> MapAllProperties()
{
   IMapBuilderContext<TResult> context = new MapBuilderContext();
   var properties =
            from property in typeof(TResult).GetProperties(BindingFlags.Instance | BindingFlags.Public)
            where IsAutoMappableProperty(property)
            select property;
   foreach (var property in properties)
   {
       context = context.MapByName(property);
   }
   return context;
}
为什么需要再次调用GetProperty()?NormalizePropertyInfo()的目的是什么


任何帮助都将不胜感激,谢谢。

真奇怪。我注意到的一个区别是,第一个GetProperty()调用只查找实例属性,而第二个调用可以返回实例或静态。但它应该只返回相同的PropertyInfo,因为据我所知,类型不能同时具有相同名称的实例和静态属性。我想知道,两个调用中的TResult类型是否相同?@TimB是的,事实上NormalizePropertyInfo()驻留在MapBuilderContext类中,MapBuilderContext类是MapBuilder类中的一个嵌套类。因此TResult与外部类(MapBuilder)完全相同。所以两个GetProperty都应该返回相同的值,这是最让我困惑的关键点。
private static PropertyInfo NormalizePropertyInfo(PropertyInfo property)
{
    if (property == null) throw new ArgumentNullException("property");
    return typeof(TResult).GetProperty(property.Name);
}