Usually "as" is preferred to "is" because the usage pattern of both
requires most of the time to cast to the tested type.
I had a look at Type.IsAssignableFrom with Reflector and it's a hell
of a method nearly 50 lines long.
No idea re performance as I never go anywhere near MSIL...

On Dec 18, 9: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!
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---

Reply via email to