方法 GetProperties with BindingFlags.Public 不返回任何内容



可能是一个愚蠢的问题,但我在网上找不到任何解释。
这段代码不能工作的具体原因是什么?代码应该将属性值从Contact(源)复制到新实例化的ContactBO(目标)对象。

public ContactBO(Contact contact)
{
    Object source = contact;
    Object destination = this;
    PropertyInfo[] destinationProps = destination.GetType().GetProperties(
        BindingFlags.Public);
    PropertyInfo[] sourceProps = source.GetType().GetProperties(
        BindingFlags.Public);
    foreach (PropertyInfo currentProperty in sourceProps)
    {
        var propertyToSet = destinationProps.First(
            p => p.Name == currentProperty.Name);
        if (propertyToSet == null)
            continue;
        try
        {
            propertyToSet.SetValue(
                destination, 
                currentProperty.GetValue(source, null), 
                null);
        }
        catch (Exception ex)
        {
            continue;
        }
    }
}

两个类都有相同的属性名(BO类有一些其他的,但它们在初始化时无关紧要)。这两个类都只有公共属性。当我运行上面的例子时,destinationProps sourceProps的长度为零。

但是当我用BindingFlags.Instance扩展GetProperties方法时,它突然返回所有内容。如果有人能给我解释一下,我会很感激的,因为我迷路了。

摘自GetProperties方法的文档:

必须指定其中一个BindingFlags。实例或BindingFlags。静电才能得到a回报。

这种行为是因为你必须在BindingFlags中指定Static或Instance成员。BindingFlags是一个标志枚举,可以使用|(按位或)组合。

你想要的是:

.GetProperties(BindingFlags.Instance | BindingFlags.Public);

相关内容

  • 没有找到相关文章

最新更新