>>>>>> 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} >>> }; >>>>>Even better :-}