【发布时间】:2012-11-24 09:38:51
【问题描述】:
我想创建一个通用扩展方法,如果它们的值等于它们的默认值,它将为 Object 或 Struct 设置一个值。
所以我有以下代码:
public static void setIfNull<T>(this T i_ObjectToUpdate, T i_DefaultValue)
{
if (EqualityComparer<T>.Default.Equals(i_ObjectToUpdate, default(T)))
{
i_ObjectToUpdate = i_DefaultValue;
}
}
这是一个调用示例:
public OrganizationalUnit CreateOrganizationalUnit(OrganizationalUnit i_UnitToCreate)
{
i_UnitToCreate.EntityCreationDate.setIfNull(DateTime.Now); //Here is a call
i_UnitToCreate.EntityLastUpdateDate.setIfNull(DateTime.Now); //And another one
m_Context.DomainEntities.Add(i_UnitToCreate);
return i_UnitToCreate;
}
我不知道它是否与它有关,但我使用实体框架和 MVC。
在调试器中实际发生的情况我看到扩展方法 i_ObjectToUpdate = i_DefaultValue; 中的行正在工作,并且值发生了变化,但是当调试器退出扩展方法时,我看到 i_UnitToCreate.EntityCreationDate 的值保持不变。
任何想法出了什么问题?
【问题讨论】:
标签: c# entity-framework generics reflection extension-methods