>>> if (String.Equals(mkvp.Key, "PRI_KEY", StringComparison.OrdinalIgnoreCase)) >>> groupMember.PrimaryKey = Convert.ToInt32(mkvp.Value); >>> >>> if (String.Equals(mkvp.Key, "FIRST", StringComparison.OrdinalIgnoreCase)) >>> groupMember.FirstName = mkvp.Value; >>> >>> if (String.Equals(mkvp.Key, "LAST", StringComparison.OrdinalIgnoreCase)) >>> groupMember.LastName = mkvp.Value; >>> >>> if (String.Equals(mkvp.Key, "GstNo", StringComparison.OrdinalIgnoreCase)) >>> groupMember.GuestNo = Convert.ToInt64(mkvp.Value); >>> >>> if (String.Equals(mkvp.Key, "Notes", StringComparison.OrdinalIgnoreCase)) >>> groupMember.Notes = mkvp.Value;>>
>> static class Test_DictionaryDelegates >> { >> delegate void ChangeGroupMember(GroupMember groupMember, MKVP mkvp); >> >> static Dictionary<string, ChangeGroupMember> Actions = new Dictionary<string, ChangeGroupMember>() >> { {"PRI_KEY", ChangePrimaryKey} >> ,{"FIRST", ChangeFirstName} >> ,{"LAST", ChangeLastName} >> ,{"GSTNO", ChangeGuestNo} >> ,{"NOTES", ChangeNotes} >> }; >> >> //methods per case >> static void ChangePrimaryKey(GroupMember groupMember, MKVP mkvp) >> { >> groupMember.PrimaryKey = Convert.ToInt32(mkvp.Value); >> } >> static void ChangeFirstName(GroupMember groupMember, MKVP mkvp) >> { >> groupMember.FirstName = mkvp.Value; >> } >> static void ChangeLastName(GroupMember groupMember, MKVP mkvp) >> { >> groupMember.LastName = mkvp.Value; >> } >> static void ChangeGuestNo(GroupMember groupMember, MKVP mkvp) >> { >> groupMember.GuestNo = Convert.ToInt64(mkvp.Value); >> >> } >> static void ChangeNotes(GroupMember groupMember, MKVP mkvp) >> { >> groupMember.Notes = mkvp.Value; >> } >> >> // it happens here >> internal static void Go() >> { >> GroupMember groupMember = new GroupMember(1, "Gregory", "Adam", 234, "none"); >> MKVP mkvp = new MKVP("First", "Alan"); >> >> ChangeGroupMember action; >> >> if( !Actions.TryGetValue(mkvp.Key.ToUpper(), out action)) >> throw new NotImplementedException(string.Format("Don't know what to do with {0}", mkvp.Key)); >> >> action(groupMember, mkvp); >> >> } >> >> } >> >> >> class MKVP >> { >> public string Key; >> public string Value; >> public MKVP(string key, string value) >> { >> Key = key; >> Value = value; >> } >> } >> class GroupMember >> { >> public int PrimaryKey ; >> public string FirstName; >> public string LastName; >> public long GuestNo; >> public string Notes; >> public GroupMember(int primaryKey ,string firstName, string lastName, long guestNo, string notes) >> { >> PrimaryKey = primaryKey; >> FirstName = firstName; >> LastName = lastName; >> GuestNo = guestNo; >> Notes = notes; >> } >> } >>>I like that tho, given my druthers, I'd prefer an enum as the dictionary key:
delegate void ChangeGroupMember(GroupMember groupMember,string s); > > private static void Main(string[] args) > { > > var actions = new Dictionary<Action, ChangeGroupMember> > { > {Action.PrimaryKey, ChangePrimaryKey}, > {Action.First, ChangeFirstName}, > {Action.Last, ChangeLastName} > }; > > GroupMember groupMember = new GroupMember(1, "Gregory", "Adam", 234, "none"); > MKVP mkvp = new MKVP(Action.First, "Alan"); > actions[mkvp.Key](groupMember,mkvp.Value); > }>although you'd have to ensure that the dictionary had an entry for all possible enum values......
static Dictionary <string, Action<GroupMember, MKVP>> Actions = new Dictionary<string,Action<GroupMember,MKVP>>() { {"PRI_KEY", ChangePrimaryKey} ,{"FIRST", ChangeFirstName} ,{"LAST", ChangeLastName} ,{"GSTNO", ChangeGuestNo} ,{"NOTES", ChangeNotes} };