ConvertPropertiesAndValuesToHashtable Extension method
public static class Extensions { public static Hashtable ConvertPropertiesAndValuesToHashtable(this object obj) { var ht = new Hashtable();
// get all public static properties of obj type var propertyInfos = obj.GetType().GetProperties().Where(a=>a.MemberType.Equals(MemberTypes.Property)).ToArray(); // sort properties by name Array.Sort(propertyInfos, (propertyInfo1, propertyInfo2) => propertyInfo1.Name.CompareTo(propertyInfo2.Name)); // write property names foreach (PropertyInfo propertyInfo in propertyInfos) { ht.Add(propertyInfo.Name, propertyInfo.GetValue(obj, BindingFlags.Public, null, null, CultureInfo.CurrentCulture)); } return ht; } }
Tests
using System; using System.Collections; using System.Globalization; using System.Linq; using System.Reflection;
using Microsoft.VisualStudio.TestTools.UnitTesting; using Presentation; using Presentation.Mappers; using Presentation.Model; using SoftwareApproach.TestingExtensions; using TestHelpers; \[Concern(typeof(DocumentMetaDataToDmsDocumentMetaDataMapper))\] \[TestClass\] public class WhenUsingExtensions : ContextSpecification<DocumentMetaDataToDmsDocumentMetaDataMapper> { private DocumentMetadata metadata; private Hashtable ht; protected override void Context() { metadata = RandomHelper.FillPropertiesWithRandomValues<DocumentMetadata>(new DocumentMetadata()); metadata.RiskId = 12; } protected override void Because() { ht = metadata.ConvertPropertiesAndValuesToHashtable(); } \[TestMethod\] public void ShouldContainCorrectCountForNumberOfMembers() { ht.Count.ShouldEqual(metadata.GetType().GetProperties().Where(a=>a.MemberType.Equals(MemberTypes.Property)).Count()); } \[TestMethod\] public void ShouldMapAllPropertiesToHashtableCorrectly() { metadata.Account.ShouldEqual(ht\["Account"\].ToString()); metadata.AssociatedNames.ShouldEqual(ht\["AssociatedNames"\].ToString()); metadata.Broker.ShouldEqual(ht\["Broker"\].ToString()); metadata.BrokerContact.ShouldEqual(ht\["BrokerContact"\].ToString()); metadata.CreatedDate.ShouldEqual(Convert.ToDateTime(ht\["CreatedDate"\], CultureInfo.CurrentCulture)); metadata.ExpiryDate.ShouldEqual(Convert.ToDateTime(ht\["ExpiryDate"\], CultureInfo.CurrentCulture)); metadata.InceptionDate.ShouldEqual(Convert.ToDateTime(ht\["InceptionDate"\], CultureInfo.CurrentCulture)); metadata.PolicyReference.ShouldEqual(ht\["PolicyReference"\].ToString()); metadata.QuoteReference.ShouldEqual(ht\["QuoteReference"\].ToString()); metadata.RiskId.ShouldEqual(Convert.ToInt32(ht\["RiskId"\])); metadata.Status.ShouldEqual(ht\["Status"\].ToString()); metadata.Underwriter.ShouldEqual(ht\["Underwriter"\].ToString()); metadata.UniqueMarketReference.ShouldEqual(ht\["UniqueMarketReference"\].ToString()); metadata.YearOfAccount.ShouldEqual(Convert.ToInt32(ht\["YearOfAccount"\])); } }
Published: