我想創建一個通用擴展方法,如果它們的值等於它們的默認值,則會將值設置爲Object或Struct。setIfNull擴展方法將不會將值設置爲對象
,所以我有以下代碼:
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
的值仍未解除。
任何想法出了什麼問題?
相關:http://stackoverflow.com/questions/1259103/doesnt-c-sharp-extension-methods-allow-passing-parameters-by-reference。 –