下面是我实现的方法的简化示例。
return $this->httpKernel->handle(Request::create($uri), HttpKernelInterface::SUB_REQUEST);
除了要返回对象数组之外,我还有另一个用例:
public double[] CreateArray(double[] input)
{
var output = new double[10];
for (int i = 0; i < 10; ++i)
{
output[i] = input[i] * 3.14;
}
return output;
}
是否可以使其通用到足以在两种情况下使用?
答案 0 :(得分:5)
您可以创建一个方法,将输入double[]
转换为带有lambda的T
:
static T[] Convert<T>(IEnumerable<double> input, Func<double,T> converter) {
return input.Select(converter).ToArray();
}
static T[] Convert<T>(IEnumerable<double> input, Func<double,int,T> converter) {
return input.Select(converter).ToArray();
}
像这样调用此方法:
double[] res1 = Convert(input, d => d * 3.14);
Series[] res2 = Convert(input, (d, i) => new Series(i, input[i] * 3.14));
请注意,由于转换是一行,因此您最好直接使用Select
:
double[] res1 = input.Select(d => d * 3.14).ToArray();
Series[] res2 = input.Select((d, i) => new Series(i, input[i] * 3.14)).ToArray();
直接LINQ方法使您的用户“立即熟悉”,因为他们不必导航到您的Convert
方法即可看到它的作用。
答案 1 :(得分:1)
您可以创建具有可更新项约束的通用方法
public T[] CreateArray<T>(double[] input) where T: new()
{
var output = new T[10];
for (int i = 0; i < 10; ++i)
{
output[i] = (T) Activator.CreateInstance(typeof(T), new object[] { i, input[i] * 3.14 });;
}
return output;
}