.NET反射:如何获取在分部类上定义的属性



我使用.NET实体框架。我想将属性从一个EntityObject复制到另一个EntityObject。但是System.Type.GetProperties()似乎没有返回在分部类上定义的属性。

代码:

在Visual Studio生成的XXX.edmx/XXX.Designer.cs中,我有一个类MyTable:

public partial class MyTable: EntityObject{..}

我想给MyTable类添加一些属性,所以我添加了文件XXX.Manual.cs:

public partial class MyTable: EntityObject{
    public string myProp{get;set;}
}

但是myTableObj.GetType().GetProperties()不包含myProp!!!

如何使用反射获取myProp?

[EDIT]我想对Alex的回答发表评论,但不知道为什么代码部分没有格式化。

是的,这很奇怪。我使用此代码将属性从实体复制到另一个对象:

public static void CopyTo(this EntityObject Entity, EntityObject another){
    var Type = Entity.GetType();
    foreach (var Property in Type.GetProperties()){
        ...
        Property.SetValue(another, Property.GetValue(Entity, null), null);
    }
}
//in some other place:
myTableObj.CopyTo(anotherTableObj);

属于couse myTableObj&另一个TableObj的类型为MyTable。

当调试到CopyTo方法时,VS显示Entity&另一种是MyTable&我可以看到实体.myProp,另一个.myProp

但是foreach语句中的Property var根本不会循环到myProp属性!

[EDIT]对不起。上面的代码(CopyTo方法)是从迪亚曼迪耶夫对另一个问题的回答中复制的

但他的代码是错误的:"break"语句必须替换为"continue":D

首先,分部类只是源代码的拆分方式。它不会影响已编译的程序集。

您可能看不到myProp属性,因为myTableObj的类型不是MyTable

试试这个:

var property = typeof(MyTable).GetProperty("myProp");

[EDIT]

刚刚检查:

EntityObject x = new MyTable();
var property1 = typeof(MyTable).GetProperty("myProp");
var property2 = x.GetType().GetProperty("myProp");

property1property2都返回了该属性。

[EDIT]

试过你的代码,经过小修改后就可以了:

public static void CopyTo(EntityObject fromEntity, EntityObject toEntity)
{
    foreach (var property in fromEntity.GetType().GetProperties())
    {
        if (property.GetSetMethod() == null)
            continue;
        var value = property.GetValue(fromEntity, null);
        property.SetValue(toEntity, value, null);
    }
}

尽管晚了,但我的问题在于Visual Studio生成了以下代码:

public System.Windows.Forms.ListView myListView;

然而,在ListView显示在GetProperties方法中之前,我必须执行以下操作:

public System.Windows.Forms.ListView myListView { get; set; }

希望这能帮助到其他人。

相关内容

  • 没有找到相关文章