我試圖使用示例表單http://blogs.msdn.com/b/davidebb/archive/2009/10/23/using-c-dynamic-to-call-static-members.aspx來消除代碼重複。如何使用動態刪除重複代碼
if (Categories != null) {
foreach (var item in Categories)
{
if (item.ID != 0)
{
Category category = Category.Load(item.ID);
category.Name = item.Name;
category.Project = project;
category.Save();
}
else
{
if(!String.IsNullOrEmpty(item.Name))
{
Category category = new Category(project, item.Name);
category.Save();
}
}
}
}
if (Priorities != null)
{
foreach (var item in Priorities)
{
if (item.ID != 0)
{
Priority priority = Priority.Load(item.ID);
priority.Name = item.Name;
priority.Project = project;
priority.Save();
}
else
{
if (!String.IsNullOrEmpty(item.Name))
{
Priority priority = new Priority(project, item.Name);
priority.Save();
}
}
}
我試圖做一些事情如下,但有錯誤消息
在部分不能調用非委託類型
if (!String.IsNullOrEmpty(item.Name))
{
dynamic newObject = typeDynamic(project, item.Name);
newObject.Save();
}
SaveObjects(typeof(Category), Categories.ToList(), project);
SaveObjects(typeof(Priority), Priorities.ToList(), project);
任何幫助請。
謝謝。
什麼是錯,我該如何糾正?
private void SaveObjects(Type type, dynamic currentItems, Project project)
{
dynamic typeDynamic = new StaticMembersDynamicWrapper(type);
foreach (var item in currentItems)
{
if (item.ID != 0)
{
dynamic classValues = typeDynamic.Load(item.ID);
classValues.Name = item.Name;
classValues.Project = project;
classValues.Save();
}
else
{
if (!String.IsNullOrEmpty(item.Name))
{
dynamic newObject = typeDynamic(project, item.Name);
newObject.Save();
}
}
}
}
它'的代碼錯誤的代碼 如果 { 動態NEWOBJECT = typeDynamic(項目,item.Name)(String.IsNullOrEmpty(item.Name)!); newObject.Save(); } – learning 2010-08-02 07:54:53