C#の多次元配列はなぜIEnumerable<T>を実装しないのか?
質問
C#の多次元配列には
IEnumerable<T>
を実装しているのに対し
IEnumerable
. 一次元配列の場合,両方とも
IEnumerable<T>
と
IEnumerable
が実装されています。
なぜこのような違いがあるのでしょうか。もし多次元配列が
IEnumerable
であれば、きっと汎用版も実装されているはずですよね?私がこのことに気づいたのは、多次元配列の拡張メソッドを使おうとしたとき、それが
Cast<T>
などを使わないと失敗します。ですから、多次元配列に
IEnumerable<T>
.
私の質問をコードで明確にするために、私は次のコードが印刷されることを期待します。
true
を4回表示すると思うのですが、実際には
true
,
false
,
true
,
true
:
int[] singleDimensionArray = new int[10];
int[,] multiDimensional = new int[10, 10];
Debug.WriteLine(singleDimensionArray is IEnumerable<int>);
Debug.WriteLine(multiDimensional is IEnumerable<int>);
Debug.WriteLine(singleDimensionArray is IEnumerable);
Debug.WriteLine(multiDimensional is IEnumerable);
どのように解決するのですか?
CLRには2種類の配列があります。 ベクトル と、0 ではない境界と 0 以外のランクを持つことができる、より一般的な配列です。
CLI仕様のセクション8.9.1より。
さらに、作成されたベクターで 要素タイプTを持つ インタフェース
System.Collections.Generic.IList<U>
(§8.7) を実装しており、U := T となります。
私にはかなり奇妙に見えると言わざるを得ません。すでに実装されていることを考えると
IEnumerable
を実装していることを考えると、なぜそれが
IEnumerable<T>
. を実装するのはあまり意味がないでしょう。
IList<T>
を実装するのはあまり意味がありませんが、シンプルな汎用インターフェイスなら問題ないでしょう。
これを望むのであれば、どちらかというと
Cast<T>
(を呼び出すか(.NET 3.5を使用している場合)、配列内を反復する独自のメソッドを記述します。キャスティングを回避するには、各次元の下限/上限を見つける独自のメソッドを記述し、その方法で物を取得する必要があります。非常に快適ではありません。
関連
-
[解決済み】「The breakpoint will not currently be hit」を改善するには?このドキュメントにはシンボルが読み込まれていません。" という警告はどうすれば改善されますか?
-
[解決済み】ASP.NET Core Dependency Injectionのエラーです。アクティブ化しようとしているときに、タイプのサービスを解決できません。
-
[解決済み] 配列の反復処理に "for...in "を使用するのは、なぜ良くないのでしょうか?
-
[解決済み] 配列の場合、なぜ a[5] == 5[a] になるのでしょうか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] C#でHashtableよりDictionaryが好まれる理由とは?
-
[解決済み] 配列の結合/平坦化
-
[解決済み] JavaScriptで配列を比較する方法は?
-
[解決済み] IEnumerable<T> と IQueryable<T> を比較する。
-
[解決済み】JavaScriptで2つの配列を結合し、項目の重複を排除する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】ここで「要求URIに一致するHTTPリソースが見つかりませんでした」となるのはなぜですか?
-
[解決済み】C#におけるtypedefの等価性
-
[解決済み】Excel "外部テーブルが期待された形式ではありません。"
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】WPFでXamlファイルにコメントを追加する方法は?
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】C# - パスに不正な文字がある場合
-
[解決済み】なぜこのコードはInvalidOperationExceptionを投げるのですか?
-
[解決済み】EF 5 Enable-Migrations : アセンブリにコンテキストタイプが見つかりませんでした
-
[解決済み】Moqを使用してメソッド呼び出しを検証する