This code:
object NHibernate.UserTypes.IUserType.NullSafeGet( System.Data.Common.DbDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner ) { if (names.Length != 1) throw new System.InvalidOperationException("Only expecting one column..."); object value = rs[names[0]]; if (value is System.DateTime) return ((System.DateTime)value).ToUniversalTime(); else return null; }
Can be rewritten with C# 7's pattern matching:
object NHibernate.UserTypes.IUserType.NullSafeGet( System.Data.Common.DbDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner ) { if (names.Length != 1) throw new System.InvalidOperationException("Only expecting one column..."); if (rs[names[0]] is System.DateTime value) return value.ToUniversalTime(); else return null; }
Nice, the variable declaration is inlined. It only means one thing, ternary!
object NHibernate.UserTypes.IUserType.NullSafeGet( System.Data.Common.DbDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner ) { if (names.Length != 1) throw new System.InvalidOperationException("Only expecting one column..."); return rs[names[0]] is System.DateTime value ? value.ToUniversalTime() : (System.DateTime?) null; }
And now that exceptions can be thrown inside of ternary statement? Ternary all the things!
object NHibernate.UserTypes.IUserType.NullSafeGet( System.Data.Common.DbDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner ) { return names.Length != 1 ? throw new System.InvalidOperationException("Only expecting one column...") : rs[names[0]] is System.DateTime value ? value.ToUniversalTime() : (System.DateTime?) null; }
And who uses return statement in the 21st century? Use lambda expression syntax!
object NHibernate.UserTypes.IUserType.NullSafeGet( System.Data.Common.DbDataReader rs, string[] names, NHibernate.Engine.ISessionImplementor session, object owner ) => names.Length != 1 ? throw new System.InvalidOperationException("Only expecting one column...") : rs[names[0]] is System.DateTime value ? value.ToUniversalTime() : (System.DateTime?) null;
the "var is type newVar" was a new trick to me in C#. It remind me of optional binding in Swift.
ReplyDeleteAnd nicely played with the lambda finish. You forgot the mike-drop.