>>>>> 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 :-}