>> 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......