可能是一个愚蠢的问题,但我在网上找不到任何解释
这段代码不起作用的具体原因是什么?该代码应该将属性值从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
的长度为零。
但是,当我使用GetProperties
扩展BindingFlags.Instance
方法时,它会突然返回所有内容。我很感激,如果有人可以解释这件事,因为我迷路了。
答案 0 :(得分:45)
来自GetProperties
方法的文档:
您必须指定BindingFlags.Instance或 BindingFlags.Static以获得一个 返回。
答案 1 :(得分:26)
此行为是因为您必须在BindingFlags中指定静态成员或实例成员。 BindingFlags是一个标志枚举,可以使用|
(按位或)组合。
你想要的是:
.GetProperties(BindingFlags.Instance | BindingFlags.Public);