問題タブ [ilist]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
.net - IEnumerableの変換IListへ
メソッドがSystem.Collections.IList型のパラメーターを受け取る場合、合法的に/安全に型の値を渡すことができSystem.Collections.Generic.IEnumerable<T>
ますか?
これが可能である理由と、メソッド内でが使用されT
たときにオブジェクトに実際に何が起こるかについて、完全に説明していただければ幸いです。IEnumerable<T>
オブジェクトの基本タイプに変換されていますか?
として使用されていSystem.Collections.IEnumerable
ますか?
これが問題(つまり、パフォーマンスの問題)を引き起こすシナリオはありますか?
よろしくお願いします、ジョン
wpf - MVVMを使用してIListをリストコントロールにバインドする
MVVMパターンを理解しようとしていますが、サンプルプログラムを使用して作業しました。モデルはC#.netライブラリであり、クエリを実行するとIList<INote>
オブジェクトが返されます。データバインディングを介して、ビューでこのコレクションのアイテムを追加/編集/削除できるようにしたいと思います。しかし、MVVMを使用してこれを開始する方法がわかりません。私を助けてください。
モデルは、オブジェクトを取得するためのインターフェイスを公開します。ビューには、データを追加するためのその他のコントロールIList<INote>
の内容といくつかを示すリストボックスがあります。IList<INote>
IList<INote>
.net - .NET に IArray(T) インターフェイスがないのはなぜですか?
2011 年 1 月 6 日更新:
信じられないかもしれませんが、私はこのインターフェイスを、私が始めたオープン ソース ライブラリ Tao.NET に組み込みました。このライブラリのインターフェイスを説明するブログ投稿を書きましたIArray<T>
。これは、この質問で最初に提起した問題 (1 年前?!) に対処するだけでなく、BCL に (私の意見では) 非常に欠けている共変インデックス インターフェイスも提供します。
質問(要するに):
なぜ .NET には があり、リストを変更するメソッド ( 、 など) を実装して提供するのに、リストを変更せIList<T>
ずにインデックスによるランダム アクセスを提供するなどの中間インターフェイスを提供しないのかと尋ねました。ICollection<T>
Add
Remove
IArray<T>
編集 2010-Jan-21 2:22 PM EST:
Jon Skeet の元の回答 ( のようなコントラクトが必要になる頻度について彼は質問した) へのコメントで、クラスIArray<T>
のKeys
とValues
プロパティはそれぞれとであり、Jon は次のように回答したと述べました。SortedList<TKey, TValues>
IList<TKey>
IList<Value>
ただし、この場合は IList であると宣言されており、インデクサーを使用するだけでよいことがわかります。. . . とてもエレガントというわけではありません。
これは合理的ですが、それができないことを知っているだけなので、痛みはありません. しかし、あなたが知っている理由は、コードから明らかだからではありません。SortedList<TKey, TValue>
クラスの経験があるということです。
これを行っても、Visual Studio は警告を表示しません。
によると、それは合法IList<string>
です。しかし、例外が発生することは誰もが知っています。
ギヨームも適切な点を指摘しました。
インターフェイスは完璧ではありませんが、開発者は Add/Remove/Set を呼び出す前に IsReadOnly プロパティを確認できます...
繰り返しますが、これは理にかなっていますが、少し遠回りだと思いませんか?
次のようにインターフェイスを定義したとします。
ここで、このインターフェイスを実装することを一般的な方法にしたとします。ただし、そのWalk
メソッドについてのみです。多くの場合、私は...に設定IsCapableOfRunning
してonfalse
をスローすることを選択します。NotSupportedException
Run
次に、次のようなコードがあるかもしれません。
私は気が狂っていますか、それともこの種の と呼ばれるインターフェースの目的を無効にしていますICanWalkAndRun
か?
元の投稿
.NET では、インデックスによるランダム アクセスを提供するコレクション プロパティ (またはインデックス付きコレクションを返すメソッドなど) を持つクラスを設計しているときに、/ itemsを削除し、OOP に関して「正しいことを行い」、API を壊さずに内部実装を変更できるようにインターフェイスを提供したい場合は、IList<T>
.
標準的なアプローチは、メソッド、などIList<T>
を明示的に定義する の実装を使用することです。通常は次のようなことを行います。Add
Insert
でも、これがなんか嫌。別の開発者が私のクラスを使用していて、私のクラスに type のプロパティがIList<T>
あり、インターフェイスの全体的な考え方が「これらは利用可能なプロパティとメソッドです」である場合、なぜNotSupportedException
(またはどのような場合でも)をスローする必要があるのですか?彼/彼女は、インターフェイスによれば完全に合法であるべきことをしようとしていますか?
インターフェースを実装し、そのメンバーの一部を明示的に定義することは、レストランを開いてメニューにいくつかのアイテムを追加するようなものだと思います.決して利用できません。
次のように、インデックスによる非常に基本的なランダム アクセスを提供するインターフェイスのようなものがあるはずですIArray<T>
が、追加/削除はありません。
そして、その、およびメソッドをIList<T>
実装ICollection<T>
しIArray<T>
て追加することができます。IndexOf
Insert
RemoveAt
もちろん、いつでもこのインターフェイスを作成して自分で使用することもできますが、それを実装していない既存の .NET クラスのすべてには役に立ちません。IList<T>
(そして、はい、 anyを取得して を吐き出すラッパーを作成できることは知っていますIArray<T>
が、... 真剣に?)
System.Collections.Generic
のインターフェイスがこのように設計された理由について、何か洞察を持っている人はいますか? 何か不足していますか?のメンバーを明示的に定義するアプローチに関する私の問題について私が言っていることに対して、説得力のある議論はありIList<T>
ますか?
.NET のクラスとインターフェイスを設計した人よりも自分のほうがよく知っているかのように、生意気に聞こえるように言っているわけではありません。私には意味がありません。しかし、私がおそらく考慮していないことがたくさんあることを認める準備ができています.
c# - IListをリストにキャスト
IList
型を型にキャストしようとしList
ていますが、毎回エラーが発生します。
Model.subproduct
を返しますIList<SubProduct>
。
c# - ASP.NET MVC 2:ネストされたエンティティを編集するC#ビューはどのように見えますか?
サーバー側のMVC2ビューを、ネストされたIList要素を持つオブジェクトで機能させるために、過去数週間にわたって何度も試しましたが、あまり成功しませんでした。この質問が解決することを願っているという基本的な理解が欠けています。
私が欲しいのは、階層(それぞれにサブ製品のリストがある製品のリスト、それぞれに画像のリストがある製品のリストなど)を含む、情報をインラインで変更できる製品のリストを表示するフォームです。古いMSAccessフォームを再作成しようとしています。大きなフォームには製品のリストがあり、サブフォームには関連製品が表示され、すべてインライン編集が可能です。Accessは、異なるレコードに焦点を合わせると、各レコードを保存します。
次のようなドメインモデルがあるとします。
そして、次のようなビューモデル:
MVC 2ビューで、単一のモデルをコントローラーにポストバックできるように、編集フィールドをどのようにコーディングしますか?私はに精通しています
メカニックですが、各IListには、同じ画面上の要素をCRUDする方法が必要です。これはビッグデータ入力画面であり、リスト内のすべての製品を表示できるのと同じくらい速度が重要です。[追加]ボタン、[削除]ボタン、および入力を編集した後にフォーム全体を投稿する手段が必要です。
JQueryの観点から見ると:
- モデルをJSONとしてシリアル化し、最初のN個のIList要素の初期フォームを作成します
- コンテナdivの一番下に達したときに、同じリストに追加の製品をその場でロードします
- 保存/投稿時にモデル全体を受け入れるか、IList要素ごとに個別のhtmlフォームタグを設定するなど、個々のエンティティに対して同じフォームの一部を受け入れます
しかし、何らかの理由で、サーバー側でこれを行う方法がわかりません。ビュー自体のリンクやサンプルコードは素晴らしいでしょう。IListのない要素は、特にUIテンプレートでうまく機能するようです。編集可能な各エンティティの周りに個別のhtmlフォームタグの束を作成し、投稿で一度に1つの要素のみを処理するようにしますか?
c# - 大きな配列でのメモリ リーク - IList をサブクラス化すると修正されますか?
アプリケーションのメモリ パフォーマンスを改善する必要があるのですが、メモリの断片化に問題があることがわかりました。
Red Gate の Andrew Hunter によるラージ オブジェクトに関する興味深い記事を読みましたが、彼が推奨する解決策の 1 つが次のとおりです。
大規模なデータ構造を長期間存続させる必要がある場合、特に時間の経過とともにサイズを大きくする必要がある場合は、別のデータ構造を使用または作成して格納することを検討するのが最善の方法です。配列は、大きなオブジェクト ヒープに置かれる前に最大で約 10,000 の要素を含むことができ、問題を引き起こす可能性があります。そのため、100,000 のエントリを保存する非常に効果的な方法は、それぞれが 10,000 の要素を含む 10 個の配列を保存することです。大きなオブジェクトには最終的に何も含まれません。断片化が発生しないようにします。これはサブクラスとして記述でき、
IList
既存のコードを透過的に置き換えることが容易になります。
彼の提案を自分のコードに実装するにはどうすればよいですか?
私のプログラムには非常に複雑な形式があります (開くたびに残りのメモリを残すオブジェクトを使用します)。犯人である可能性のある複雑なリストを見つけました。彼の提案を実装して、問題が解決するかどうかを確認したいと思います。
.net - SortedList(TKey,TValue).Keys プロパティが ReadOnlyCollection(TKey) ではなく IList(TKey) であるのはなぜですか?
インターフェイスには、、、などのプロパティIList<T>
でサポートされていない操作に加えて、インデックスによるアクセスが含まれます。SortedList<TKey, TValue>.Keys
Add
Remove
Insert
のReadOnlyCollection<T>
戻り値などのList<T>.AsReadOnly
は実装されIList<T>
ているため、インデックスによるアクセスを提供しますが、 などの不正な操作をAdd
明示的に実装することで隠します。さらに、これは基になるリストの単なるラッパーです。そのため、コピーは作成されないため、実際のパフォーマンスに影響を与えることはありません (私はそう思います)。
なぜSortedList<TKey, TValue.Keys
ではないのReadOnlyCollection<TKey>
ですか?(さらに言えば、Values
プロパティが ではないのはなぜReadOnlyColllection<TValue>
ですか?)
c# - IListをキャストしますかタイプT[]の配列に列挙を引き起こしますか?
私は次のようなメソッドを持っています:
メソッドの本体が実行されると、キャスト中に列挙が行われますか?基になるタイプが異なる場合、それは変わりますか?
c# - ArrayList または IList を使用する必要がありますか
.NET Framework 1.1 を使用していますが、誰かがオブジェクトの動的配列の実装を手伝ってくれることを願っていますか?
私が使用したいオブジェクトの骨抜きの例を以下に示します。
ArrayList を使用する必要がありますか、それとも CarList クラスを作成して IList インターフェイスを実装する方がよいと思いますか? パフォーマンス上の利点はありますか?
vb.net - カスタムリストから文字列のリストに変換
こんにちは、私は次のコードを持っています:
その意図は、カスタム オブジェクトの IList を、Ilist 内の各要素を含む同等の文字列に変換することです。残念ながら、カスタム オブジェクトの基になるデータを取得する方法を見つけることができないようです。もちろん、上記の例のように、 object を使用すると、基になるデータにアクセスするのではなく、単に型定義の文字列が得られます。どんな支援も大歓迎です。
ポール。