我試圖複製性在我的代碼屬性集找不到方法,異常System.ArgumentException
這裏更新供應商是我的供應商更新方法
public bool UpdateSupplier(PurchaseOrderHeader header, string newSupplier)
{
try
{
var oldSupplier = GetSupplierForPoHeader(header);
Reflection.CopyPropertyValues(oldSupplier, newSupplier);
Console.WriteLine($"{oldSupplier} : {newSupplier}");
_context.SaveChanges();
return true;
}
catch (Exception ex)
{
Logger.LogException(ex);
throw;
}
}
這裏是我的更新方法值。
public static void CopyPropertyValues(object source, object destination)
{
try
{
var destProperties = destination.GetType().GetProperties();
foreach (var sourceProperty in source.GetType().GetProperties())
foreach (var destProperty in destProperties)
{
if (destProperty.Name != sourceProperty.Name ||
!destProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType) ||
destProperty.Name == "Id")
continue;
destProperty.SetValue(destination, sourceProperty.GetValue(source, new object[] { }),
new object[] { });
break;
}
}
catch (Exception e)
{
Console.WriteLine(@"Inner Exception: "+e.InnerException?.Message);
Console.WriteLine(@"Message: "+e.Message);
}
}
任何想法?
我檢查了其他堆棧溢出問題,似乎沒有人正在解決我的問題,我是相當新的反思,所以我不知道如何去解決這個問題。
在哪一行是拋出的錯誤?在if和break之間? –
'var destProperties = destination.GetType()。GetProperties();'你得到所有的屬性,而不僅僅是具有setter的屬性。請參閱http://stackoverflow.com/questions/3390358/using-reflection-how-do-i-detect-properties-that-have-setters。 –