可能是一個愚蠢的問題,但我無法找到任何網絡上的解釋。
此代碼無法正常工作的具體原因是什麼?代碼應該將屬性值從Contact
(源)複製到新實例化的ContactBO
(目標)對象。方法GetProperties與BindingFlags.Public不返回任何東西
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
和 的長度爲零。
但是,當我用BindingFlags.Instance
擴大GetProperties
方法時,它突然返回所有內容。如果有人能夠澄清這個問題,我會感激,因爲我迷路了。
如果你想檢查''對你null'不應該使用'First',因爲它會拋出一個異常,如果它不能找到它不一個項目propertyToSet'匹配謂詞。改用'FirstOrDefault'。 –
爲了保存那些像我一樣關注屬性和字段之間差異的人,請嘗試GetFields(); whups。 –