かもしれないようにする必要がありますけど配列のようなアクセサ構文を公開するクラス:
class ArrayWrapper<T, TField>
{
Func<T, TField> getField;
T[] array;
public ArrayWrapper(T[] array, Func<T, TField> getField)
{
this.array = array;
this.getField = getField;
}
public TField this[int index]
{
get { return this.getField(this.array[index]);}
}
}
そこで、このような単純なヘルパーメソッドで:
:あなたが望むように使用することができた...
var data = new
{
time = Wrap(array_of_packet, p => p.time),
field1 = Wrap(array_of_packet, p => p.field1),
field2 = Wrap(array_of_packet, p => p.field2)
};
:
ArrayWrapper<T, TField> Wrap<T, TField>(T[] array, Func<T, TField> getField)
{
return new ArrayWrapper<T, TField>(array, getField);
}
あなたはこのようなオブジェクトを作成することができます
Plot(data.time, data.field1);
具体的なニーズに応じて、さまざまな方法でこれを詳しく説明できます。
IList<TField>
のようなインターフェイスを実装するようにして、Plot()
を基になる型には無関係に書くことができます。パフォーマンスではなく、デリゲート(Func<,>
)を使用するよりも、高い優先度である場合、あなたはArrayWrapper
定義にwhere T is struct
を追加し、ArrayWrapper
はそのコンストラクタのパラメータとしてバイトオフセットを取るかもしれない
- (配列はすでに。
IList<TField>
を実装)、および行いますいくつかのunsafe
マジックフィールドのデータに迅速にアクセスする。
私は迷った!とにかく、それは長い[]時間でなくてはならない[0] – Nair
まったく違ったレイアウトです。手動ですべてをアイテムごとにコピーする必要があります。 – Luaan
あなたは本当に[不変の構造体](http://stackoverflow.com/questions/3751911/why-are-c-sharp-structs-immutable)の作成に目を通すべきです。 – juharr