private static void SetReadOrWriteMethod <TR, TW>(MethodInfo i, object obj, BusAccess.Operation operation, ref TR readMethod, ref TW writeMethod) { switch (operation) { case BusAccess.Operation.Read: readMethod = (TR)(object)i.CreateDelegate(typeof(TR), obj); break; case BusAccess.Operation.Write: writeMethod = (TW)(object)i.CreateDelegate(typeof(TW), obj); break; default: throw new ArgumentException(string.Format("Unsupported access operation: {0}", operation)); } }
public void SetMethod(MethodInfo i, object obj, BusAccess.Operation operation, BusAccess.Method method) { switch (method) { case BusAccess.Method.Byte: SetReadOrWriteMethod(i, obj, operation, ref ReadByte, ref WriteByte); break; case BusAccess.Method.Word: SetReadOrWriteMethod(i, obj, operation, ref ReadWord, ref WriteWord); break; case BusAccess.Method.DoubleWord: SetReadOrWriteMethod(i, obj, operation, ref ReadDoubleWord, ref WriteDoubleWord); break; default: throw new ArgumentException(string.Format("Unsupported access method: {0}", method)); } }