いくつかのコンテキスト:コレクションに物を追加する主な方法は、Add(またはそのようなもの)という名前のメソッドを使用するクラスを作成したいと思います。そして、最もよく見える署名はparams object []です。内部的には、この関数は/ if-elseをすべて受け入れることができるすべての型を切り替える必要があります。ですから、当初はこのオブジェクト[]配列を受け入れることができましたが、オブジェクト[] []、オブジェクト[] [] []なども受け入れることができ、その後メソッド/関数を内部的に平坦化できるユーザーはこの関数を呼び出す前にその操作を行う必要はありません。複数の型を受け入れるC#関数を書くより良い方法はありますか?
そう...
は、オブジェクトの単一の種類のリストの種類のさまざまなレベルを受け入れることができます関数を記述することが可能ですか?
逆の質問として、クラスへのインターフェイスを設計するときに、
(編集:。十分に起こっがすでにありますので質問から打た)object[]
または
IEnumerable<object>
または
params object[]
を受け入れる方が良いですか?
たとえば、私はIEumerable<object>
、object[]
の両方/すべてを受け入れる機能のことを考え、そしておそらくさらにように入れ子にしています:IEnumerable<IEnumerable<object>>
、object[][]
(オン、オン、オンなど)。
これは可能ですか?
これ以上の情報は必要な場合があります。あなたの質問は、あなたが何らかのタイプのTのシーケンスを取ることができたいと思っていますか?または実際には何かのシーケンス(つまり、あらゆるタイプのもの)。つまり、T []対リスト対HashSet対またはT []対リスト対 vsハッシュセットともっと関係がありますか? –
この質問に対する普遍的な答えはありません。あなたが達成しようとしていることは本当に重要です。 –