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