24

評価typeof(Object[,][]).NameするとObject[][,]

同様にtypeof(Object[][,]).NameObject[,][]

カンマが理由もなく動いているようです。

何が得られますか?

4

2 に答える 2

19

不規則な配列と長方形の配列を混在させることは、狂気のレシピです。特定の型表記が何を意味するかについてのあなたの直感は、ほとんどの場合間違っています。少なくとも、私の直感は間違っています。

この件に関する私の記事を読んで、ここで何が起こっているのかを理解するのに役立つかどうかを確認してください。

http://blogs.msdn.com/b/ericlippert/archive/2009/08/17/arrays-of-arrays.aspx

基本的に: C# とリフレクションは、それぞれ独自の理由で、2 つの異なる方法で混合した不規則/長方形の配列を表記します。

于 2013-02-14T20:45:17.873 に答える
3

このようなエキゾチックな配列を宣言する目的は別として、リフレクションが配列の名前を生成する方法は再帰的であるように見えます: 最初に、配列の要素型の名前を生成し、次に角括弧に適切な名前を追加します。コンマの数。

Object[,][]1D 配列の 2D 配列です。2D 配列の要素の型はObject[]であるため、全体の結果は"Object[]"+"[,]"です。

アルゴリズムの仕組みを別の図で示します。

typeof(Object[][,][,,][,,,][,,,,]).Name

Object[,,,,][,,,][,,][,][]

実装の効率性以外にその背後にある理由はわかりません。一貫性がある限り、構文が C# と一致するかどうかは問題ではありません。結局のところ、.NET ユニバースの言語は C# だけではありません。

于 2013-02-14T20:51:02.550 に答える