我有以下情况,我认为这是对委托人的完美使用,但是,我对使用委托人并不陌生,并且在使其正常工作方面存在一些问题。
我从这段代码中调用AddVariable方法,该方法确定T的适当值。
switch (datum.DataType) {
case SupportedDataTypes.Int:
table = AddVariable<int>(table, datum);
break;
case SupportedDataTypes.Float:
table = AddVariable<float>(table, datum);
break;
case SupportedDataTypes.String:
table = AddVariable<string>(table, datum);
break;
case SupportedDataTypes.ChooseType:
throw new ArgumentException("type not chosen");
default:
throw new ArgumentOutOfRangeException();
}
但是AddVariable只是基于另一个开关选择适当的方法。这些方法作用于几种不同的类型,因此需要通用。
static DataTable AddVariable<T>(DataTable table, Datum datum) {
DataTable newTable = table.Clone();
AddVariableColumn(datum, newTable);
switch (datum.MixingTypeOfVariable) {
case VariableMixingType.Balanced:
table = AddBalancedValues<T>(table, datum);
break;
case VariableMixingType.Looped:
table = AddLoopedValues<T>(table, datum);
break;
case VariableMixingType.EvenProbability:
table = AddEvenProbabilityValues<T>(table, datum);
break;
case VariableMixingType.CustomProbability:
throw new NotImplementedException();
default:
throw new ArgumentOutOfRangeException();
}
Debug.Log($"table now has {table.Rows.Count} rows");
return newTable;
}
我想到了将AddLooped,AddBalanced和AddEvenProbability值用作委托,但是我似乎无法使用
编辑:预期的伪代码:
AddVariable
请注意,要应用值的函数也需要知道它的
我在网上找到了一些有关使用泛型委托的讨论,但它们似乎都与Stack有关。听起来不像我想要的。
我在网上看到了一些有关使用Func <>的东西,但是目前尚不清楚这是正确的方法,而且我并不完全理解。
我的方法也有可能倒退,因此,如果对改进设计有任何想法,那也很好。