boxing in c++? Are you sure that casting takes cycles? I think it doesn't, because it is the cmpilers job to cast.
On Thu, Dec 18, 2008 at 11:25 PM, Will Shaver <[email protected]> wrote: > Yes, but with both Daniel and Tuna's examples are incomplete. > if (typeof(IAuditableEntity).IsAssignableFrom(entity.GetType())) { > ((IAuditableEntity) entity).Audit(); > } > or > if (entity is IAuditableEntity) { > ((IAuditableEntity) entity).Audit(); > } > > In BOTH cases you have to do TWO casts. In mine you only have to do one. I > learned in C++ where casting and boxing take cycles. > > -Will > > > On Thu, Dec 18, 2008 at 1:17 PM, Tuna Toksöz <[email protected]> wrote: > >> or >> >> if (entity is IAuditableEntity) >> ? :) >> >> On Thu, Dec 18, 2008 at 11:08 PM, Daniel Fernandes < >> [email protected]> wrote: >> >>> >>> Beside the point I know but : >>> if (typeof(IAuditableEntity).IsAssignableFrom(entity.GetType())) { >>> to >>> var auditable = entity as IAuditableEntity; >>> if (auditable != null) { >>> >>> isn't easier to read ? >>> >>> >>> >>> On Dec 18, 6:35 am, "Stefan Sedich" <[email protected]> wrote: >>> > Hello, >>> > >>> > I am setting date last modified audit on an entity, I implement an >>> > IAuditableEntity interface and use a helper to set the date modified: >>> > >>> > public override bool OnFlushDirty(object entity, object id, object[] >>> > currentState, object[] previousState, string[] propertyNames, >>> > global::NHibernate.Type.IType[] types) { >>> > >>> > if >>> (typeof(IAuditableEntity).IsAssignableFrom(entity.GetType())) { >>> > >>> > // If entity is auditable as this is only an update >>> > set the last modified date. >>> > SetValue(propertyNames, currentState, item => >>> > item.LastModified, DateTime.Now); >>> > >>> > } >>> > >>> > return false; >>> > } >>> > >>> > Type safe helper: >>> > >>> > public void SetValue<T>(string[] propertyNames, object[] state, >>> > Expression<System.Func<IAuditableEntity, T>> propertyExpression, T >>> > value) { >>> > >>> > var memberExpression = propertyExpression.Body as >>> MemberExpression; >>> > if (memberExpression == null) >>> > throw new ArgumentException("The member expression was >>> > not a valid member expression."); >>> > >>> > string name = memberExpression.Member.Name; >>> > int index = propertyNames.ToList().IndexOf(name); >>> > >>> > if(index == -1) >>> > throw new >>> > InvalidOperationException(string.Format("Property {0} does no exist on >>> > entity.", name)); >>> > >>> > state[index] = value; >>> > >>> > } >>> > >>> > Now the question is, I saw that you must set the current state and not >>> > the entity directly why would >>> > >>> > var ent = entity as IAuditableEntity; >>> > ent.LastModified = DateTime.Now; >>> > >>> > Not work properly or will it be fine to do this? >>> > >>> > Thanks >>> > >>> > -- >>> > Stefan Sedich >>> > Software Developerhttp://weblogs.asp.net/stefansedich >>> >>> >> >> >> -- >> Tuna Toksöz >> http://tunatoksoz.com >> >> Typos included to enhance the readers attention! >> >> >> >> >> > > > > -- Tuna Toksöz http://tunatoksoz.com Typos included to enhance the readers attention! --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "nhusers" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/nhusers?hl=en -~----------~----~----~----~------~----~------~--~---
