我很抱歉这个模糊的标题,我想你真的必须看到片段才知道我的意思:
float[] foo = new float[3];
FillFoos(foo);
return foo;
我想把它放在一行(我经常使用这个片段)。怎么可能呢?
答案 0 :(得分:3)
如果您无法更改FillFoos
功能,那么您的代码段就会尽可能短。
当然,你可以这样做:
float[] foo = new float[3]; FillFoos(foo); return foo;
但这仍然是三个陈述,并且相当难以阅读。
答案 1 :(得分:3)
你可以创建一个函数:
public float[] GetFoos()
{
float[] foo = new float[3];
FillFoos(foo);
return foo;
}
编辑:如果您需要更改数组的大小和填充数组的方法,那么您可以这样做:
public float[] GetFoos(int count, Action<float[]> populateAction)
{
float[] items = (float[])Array.CreateInstance(typeof(float), count);
populateAction(items);
return items;
}
然后你可以这样称呼它:
float[] items = GetFoos(3, FillFoos);
你甚至可以使它成为通用的:
public T[] GetFoos<T>(int count, Action<T[]> populateAction)
{
T[] items = (T[])Array.CreateInstance(typeof(T), count);
populateAction(items);
return items;
}
答案 2 :(得分:2)
在C#中,您可以创建一个分配数组的泛型函数,并使用提供的委托来填充它:
public static T[] AllocAndFill<T>(Action<T[]> fillAction, int count)
{
T[] array = new T[count];
fillAction(array);
return array;
}
并像这样使用它:
var result = AllocAndFill<float>(FillFoos,3);
答案 3 :(得分:0)
用另一种方法包裹它。
T[] GetObjects<T>(int length)
{
T[] foo = new T[length];
FillFoos(foo);
return foo;
}
现在,不要在任何地方使用该代码段,只需致电GetObjects<Foo>(3)
。
答案 4 :(得分:0)
如果您无法更改FillFoos
,那么您可以编写某种辅助方法(可能作为包含FillFoos
的任何对象的扩展方法)。
public static class Extensions
{
public static float[] SuperFoo(this FooObject foo, float[] floats)
{
foo.FillFoos(floats);
return floats;
}
}
然后:
return fooObj.SuperFoo(new float[3]);