構造体の配列又はその特性のそれぞれの配列を有するもの構造体

StackOverflow https://stackoverflow.com/questions/2290075

  •  21-09-2019
  •  | 
  •  

質問

APIを設計する際に

、私は自分のカスタム構造体の中に詳細(実行中のプロセスのEg)を持続することができます。しかし、私はいくつかの構造体を必要とするという意味、1つの以上のプロセスのためにこれをやろうとしていた場合、私はそのプロパティのそれぞれの配列と構造体の配列または1つの構造体を持つべきである(例えばのstartTime、ProcessNameのおよび他のプロセスの特性I AM興味で)ます。

どっち?API /クラスライブラリのパフォーマンスとよりよいのために良いです。

おかげ

役に立ちましたか?

解決

あなたはパフォーマンスにもかかわらず、構造体の配列を行う必要があり私見では、構造体のすべてをinstansiatingために取るヒット。 1つの状態の組織感がはるかに性能の損失を上回る、配列の束と、ワン構造体を使用して、単に各プロセスを割り当てるアレイの数の指数は非常に面倒であり、デバッグに大きな痛み得る1つの構造体に格納されていますます。

他のヒント

あなたはclassではなくstructを使用して検討するかもしれないと私はクラスのリストを使用することになります。

エリックリペットはAPIで配列を使用してに対して、いくつかの引数があります。私にとってより魅力的なの一つは、あなたが、コレクションのサイズが固定維持したいが、消費者が内容を変更できるようにしたい理由です。あなたはより多くのここに。

最終的には、内部配列を使用してそれらを格納することもできますが、私は、APIを介してこれを公開しないでしょう。人々が列挙する必要がある場合は、使用のIEnumerable の代わります。

一つは連続項目のグループからいくつかの特定の部分にアクセスされるよりも一方が頻繁より頻繁にアイテムのすべての部分にアクセスする場合は、

は、データ・ストレージの観点から、動作をキャッシュする構造体の配列で良くなります。

より興味深い質問は、データを公開する方法です。あなたがインデクサとして構造体を公開する場合は、構造体のフィールドを変更したい人には、構造体を読み出し、その一時的なコピーのフィールドを変更し、戻ってそれを記述する必要があります。あなたは "(100、23)foo.setBar" を読むためのメソッド/書き込み個々のプロパティを公開しますが、可能性があり、 ".BAR = 23のfoo(100)" よりも、むしろ少ない自然なようです。あまりにも後者の構文を許可し、私はおそらくインデクサ復帰に2つのプライベートフィールドを持つ構造体を持つことをお勧めしたい、「ルート」と「インデックス」、および構造体の各フィールドのプロパティこと例えばので、インデクサのバープロパティのセッターがroot.setBar(インデックス、値)を実行します。インデクサはまた、全体としての構造体を設定/取得するための「asWhateverStructType」プロパティを持っている必要があります。

scroll top