私は漠然としたタイトルのために申し訳ありませんが、私はあなたが本当に私が何を意味するか知っているスニペットを見るために持っていると思う:このコードスニペットはどのように短縮できますか?
float[] foo = new float[3];
FillFoos(foo);
return foo;
私は1行で(私は非常に頻繁にこのスニペットを使用することをしたいのですが)。それはどのように可能でしょうか?
私は漠然としたタイトルのために申し訳ありませんが、私はあなたが本当に私が何を意味するか知っているスニペットを見るために持っていると思う:このコードスニペットはどのように短縮できますか?
float[] foo = new float[3];
FillFoos(foo);
return foo;
私は1行で(私は非常に頻繁にこのスニペットを使用することをしたいのですが)。それはどのように可能でしょうか?
、あなたは配列を割り当てて、それを埋めるために供給し、デリゲートを使用して、一般的な機能を作ることができます:
public static T[] AllocAndFill<T>(Action<T[]> fillAction, int count)
{
T[] array = new T[count];
fillAction(array);
return array;
}
をそしてこのDOのようにそれを使用します。
var result = AllocAndFill<float>(FillFoos,3);
FillFoos
機能を変更できない場合、スニペットは可能な限り短くなります。
float[] foo = new float[3]; FillFoos(foo); return foo;
をしかし、それはまだ3つの文だと読み、かなり厳しいです:
あなたは、もちろん、これを行うことができます。
+1の笑い。 :) – Lazlo
+1、非常に興味深い:) –
あなただけの機能を作成することができます。
public float[] GetFoos()
{
float[] foo = new float[3];
FillFoos(foo);
return foo;
}
EDIT:あなたは、配列の大きさや配列を移入する方法を変更する必要がある場合、あなたはこれを行うことができます:
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);
あなたも、それは一般的なことができます:
012あなたはこのようにそれを呼び出すことができますpublic T[] GetFoos<T>(int count, Action<T[]> populateAction)
{
T[] items = (T[])Array.CreateInstance(typeof(T), count);
populateAction(items);
return items;
}
私はそれを静的にしたいと思います。 – kemiller2002
いつもfooではなく、必ずしも3つの浮動小数点ではなく、必ずしもFillFoosではありません。これは、浮動小数点配列を満たすさまざまな関数です。 – Lazlo
メソッドGenericを作成し、配列の長さを引数として受け入れることができます。 –
別の方法でまとめてください。
T[] GetObjects<T>(int length)
{
T[] foo = new T[length];
FillFoos(foo);
return foo;
}
ここで、そのスニペットをどこでも使用する代わりに、GetObjects<Foo>(3)
を呼び出してください。 C#ので
することができます場合は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]);
注:もちろん、私は単純に[] floatを返すようにFillFoosを編集することはできません。 – Lazlo
なぜできないのですか?更新された入力値を返します。 –
1つのライナーの理由は何ですか? – JonH