値がデフォルト値と等しい場合にオブジェクトまたは構造体に値を設定するジェネリック拡張メソッドを作成したいと思います。
だから私は次のコードを持っています:
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
ままであることがわかります。
何がうまくいかなかったのか?