Возможно, я неправильно понимаю ваш вопрос;но вы можете подключить что-то вроде этого:
public class MyClass {
private Dictionary<DataType, Action<object[]>> dispatcher;
public MyClass() {
dispatcher = new Dictionary<DataType, Action<object[]>>();
dispatcher.Add(DataType.dateTime, InsertDateTime);
dispatcher.Add(DataType.time, InsertTime);
...
}
//your "overload" of what to do with dateTime
private void InsertDateTime(object[] specialValues) {
var date = (DateTime)specialValues[0]; //assume the first param is DateTime;
var parentId = (int)specialValues[1]; //assume the 2nd param is an int,
...etc
}
//your "overload" for what to do with time
private void InsertTime(object[] specialValues) {
//do whatever special values you expect for DateType.time
}
public void InsertValue(DataType dataType, params object[] specialValues) {
//this function will cause the appropriate dataType specific Insert method to be called
dispatcher[dataType].Invoke(specialValues);
}
}
Это было бы чище, если бы вы знали, что сигнатура метода для каждого типа одинакова, но при условии, что ваши "специальные значения" были уникальной сигнатурой для каждого типа,Я использовал Action<object[]>
, но вы могли бы использовать Action<object, int, int>
или все, что вам нужно, чтобы получить более приятные сигнатуры методов.
Не уверен, подходит ли это тому, что вы пытаетесь сделать конкретно.Случай переключения мог бы быть намного более читаемым;тоже.