and assuming you are not talking about managed c++ On Thu, Dec 18, 2008 at 11:52 PM, Tuna Toksöz <[email protected]> wrote:
> 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! > > -- 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 -~----------~----~----~----~------~----~------~--~---
