0

最後に要求するインターフェイスに転送されるデフォルトの行列を保持する静的クラス「デフォルト」がありますdouble[][]。ここまでは、単に s を返すこのクラスに静的プロパティを配置しましたdouble[][]

これを当社のコーディング標準に準拠させるには、コードは FxCop の規則CA1819に準拠する必要があります。これにより、私が行ったように、プロパティからギザギザの配列を返すことはできなくなります。また、配列の代わりにIListorを返します (ここでIEnumerable説明したように)。

「まあまあ」と思ったので、返すプロパティを実装しましたIList<IList<double>>(ネストされた型もクールではありませんが)。しかし、私が言ったように、私が扱う必要があるインターフェースは最終的に行列を求めます..各リストを明示的に変換せずにdouble[][]、このリストのリストを配列の配列に取得する方法がわかりません。もちろん、できますが、特にこれらのマトリックスにアクセスすることさえしないため、非常に多くのオーバーヘッドが発生します。それらをインターフェイスに渡すだけです。

(追記: インターフェースのせいなのはわかっていますが、現時点では変更できません。)

編集: CA1006 に違反しているため、 dones を使用しても役に立たILists<IList<double>>ないことがわかりました。FxCop をシャットダウンするために私がとった簡単な解決策は、プロパティを内部にすることでした。とにかく、より良い解決策を以下に示します。別の方法として、インデックス付きプロパティの使用を検討することもできますが、これは C# では少し面倒です。

4

2 に答える 2

2

Matrix<T>をコンストラクターに受け入れ、T[][]変換しT[][]てプロパティをインスタンスにすることができるクラスを作成することをお勧めしDefaultsますMatrix<double>。変換は、暗黙的に、明示的に、またはメソッドを使用して実装できます。

于 2011-07-06T12:15:19.980 に答える
0

FxCop ルールは、API のユーザーの混乱を防ぎ、API の作成者が本当にやりたいことかどうかを思い出させるためにあります。

配列をプロパティとして返すことは、API コンシューマーが内部データ構造に大混乱をもたらす可能性がありますが、これはおそらく API 作成者の意図ではありません。

リンクされたルールから:

プロパティが読み取り専用であっても、プロパティによって返される配列は書き込み保護されません。配列の改ざんを防ぐために、プロパティは配列のコピーを返す必要があります。通常、ユーザーは、このようなプロパティを呼び出すことによるパフォーマンスへの悪影響を理解していません。具体的には、プロパティをインデックス付きプロパティとして使用する可能性があります。

配列を返すために彼らが推奨する方法の 1 つは、Xxx プロパティを GetXxx() メソッドに変更することです。

それは可能ですか?

于 2011-07-06T12:19:55.410 に答える