問題タブ [indexed-properties]
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.
c# - C#がインデックス付きプロパティを実装しないのはなぜですか?
この種の質問に対するEricLippertの答えは、通常、「設計、実装、テスト、および文書化のコストに見合う価値がなかったため」のようなものです。
しかし、それでも、もっと良い説明が欲しいです...私は新しいC#4機能についてのこのブログ投稿を読んでいました、そしてCOM相互運用についてのセクションで、次の部分が私の注意を引きました:
ちなみに、このコードはもう1つの新機能を使用しています。インデックス付きプロパティ(範囲の後の角かっこを詳しく見てください)。ただし、この機能はCOM相互運用でのみ使用できます。C#4.0では独自のインデックス付きプロパティを作成できません。
いいけどなんで ?C#でインデックス付きのプロパティを作成できないことはすでに知っていて後悔していましたが、この文でもう一度考えさせられました。私はそれを実装するいくつかの正当な理由を見ることができます:
- CLRはそれをサポートしている(たとえば、パラメーター
PropertyInfo.GetValue
があるindex
)ので、C#でそれを利用できないのは残念です - 記事に示されているように、COM相互運用機能でサポートされています(動的ディスパッチを使用)
- VB.NETで実装されています
this
インデクサーを作成すること、つまりオブジェクト自体にインデックスを適用することはすでに可能です。したがって、同じ構文を維持し、プロパティ名に置き換えるだけで、アイデアをプロパティに拡張することはおそらく大したことではありません。
それはそのようなことを書くことを可能にするでしょう:
現在、私が知っている唯一の回避策はValuesCollection
、インデクサーを実装する内部クラス(たとえば)を作成し、Values
その内部クラスのインスタンスを返すようにプロパティを変更することです。
これは非常に簡単ですが、面倒です...おそらくコンパイラが私たちのためにそれを行うことができます!オプションは、インデクサーを実装する内部クラスを生成し、パブリックジェネリックインターフェイスを介して公開することです。
しかしもちろん、その場合、プロパティは実際にはを返し、実際IIndexer<int, string>
にはインデックス付きプロパティではありません...実際のCLRインデックス付きプロパティを生成する方がよいでしょう。
どう思いますか ?この機能をC#で表示しますか?そうでない場合、なぜですか?
c# - 名前付きインデクサープロパティは可能ですか?
クラス内にその問題に関する配列またはその他のコレクションがあり、次のようにそれを返すプロパティがあるとします。
さて、私はこのようなものを書くことができます:
c# - C# でのインデックス作成をサポートするプロパティの簡単な作成
C# では、インデックス付きプロパティが非常に便利だと思います。例えば:
ただし、私が知る限り、インデックス作成をサポートするフィールドをサポートする構文糖衣はありません (間違っている場合は修正してください)。例えば:
これが必要な理由は、クラスで既に index プロパティを使用しているためですが 、次のようGetNumX()
に、、、GetX()
およびSetX()
関数があります。
おそらくお分かりのように、これらを 1 つのインデックス可能なフィールド プロパティとして公開する方が理にかなっています。シンタックス シュガーが必要なときはいつでも、これを実現するカスタム クラスを作成できますが、定型コードはすべて不必要に思えます。
そこで、ボイラープレートをカプセル化し、インデックス付けできるプロパティを簡単に作成できるようにするカスタム クラスを作成しました。このようにして、次のように新しいプロパティを追加できます。
この新しい IndexedProperty クラスのコードは次のようになります。
だから私の質問は:これをすべて行うためのより良い方法はありますか?
具体的に言うと、C# でインデックス可能なフィールド プロパティを作成するためのより慣用的な方法はありますか? そうでない場合、どうすればIndexedProperty
クラスを改善できますか?
編集:さらに調査した結果、Jon Skeet はこれを「名前付きインデクサー」と呼んでいます。
java - インデックス付きプロパティからアイテムを削除する - JavaBeans の質問
インデックス付きプロパティを使用しています (struts と Java/jsp を使用)。テーブル内の行/アイテムを追加/削除できる動的テーブルがあります。行の追加は意図したとおりに機能します。アクション クラスのフォームに新しい行が表示されます。削除された行は (明らかに) 設定されませんが、リストからも削除されません。void setItem(List)、void setItem(index)、Item getItem(index)、および List getItem() メソッドを実装しました。インデックス付きプロパティの動作に関する情報はあまり見つかりません。実装する必要があるリセット メソッドはありますか、それともインデックス付きプロパティが新しいリストの設定を処理することになっていますか? 私が知る限り、リストに残っているアイテムのみが設定され、それらは void setItem(Item) メソッドを使用して設定されます。
flash - このコードがReferenceError#1069をスローするのはなぜですか?
このコードの最初の行は、ReferenceError#1069をスローしています。ObjectButtonSkinにプロパティfocusMaskが見つからず、デフォルト値がありません。」「skin」変数はMovieClip型であり、実際のオブジェクトインスタンスはObjectButtonSkin型(MovieClipを拡張する)です。
これは以前は問題ではなかったので、なぜこれが起こっているのかわかりません。ObjectButtonSkinクラスは動的または他のものとしてマークされていないので、おそらくそれが問題ですか?あるサイトでは、プロパティにアクセスするために「[]」の代わりに「()」を使用する必要があると提案されましたが、それは正しくないようです。
f# - タイプでのF#インデックス付きプロパティの使用
次のC#をF#に変換しようとしています。
これは私がこれまでに持っているものです:
上記の私のタイプには2つの問題があるようです。解決方法がわかりません。1つ目は、そのmatrix。[(x、y)]のタイプは `a []であると予想されますが、タイプはdouble [、]です。2つ目は、型定義には、メンバー定義とインターフェース定義の前にlet/doバインディングが必要です。それに関する問題は、doブロックにインデックス付きプロパティを設定しようとしていることです。つまり、最初にそれを作成する必要があります。
前もって感謝します、
ボブ
wpf - バインディング主導のインデックス付きプロパティが返されない
そのインスタンスは、この XAML の DataContext として設定されます。
しかし、これはうまくいきません。
これも。
これは機能します。
追加のプロパティを表示する以外に解決策はありますか? XAML で直接何か?
entity-framework - Entity Framework (最初にコード) にインデックス付きプロパティを無視させる
エンティティには、次の宣言があります。
Entity Framework はインデックス付きプロパティを好まないため、無視しようとしました。
また、すべてのプロパティ関係を明示的に設定する必要があるため、modelBuilder からすべての検出規則を削除しようとしました。
エンティティをフェッチするための linq クエリが実行されると、「インデックス付きプロパティはサポートされていません」という例外がスローされます。
Entity Framework にインデックス付きプロパティを無視させる方法を知っている人はいますか? プロパティは、他のエンティティに対して公開されている必要があります。
前もって感謝します!
.net - このコードの意味は何ですか?
.Net Sdk で提供されるコード サンプルを次に示します。
私の質問: このreader(0)は、実際にこのプロパティを呼び出すためのショートカットであるreader.item(0)ですか?
ios - Core Dataプロパティをインデックスに登録しない理由は何ですか?
Core Dataプロパティをインデックスに登録しない理由は何ですか?私が理解していることから、検索可能なプロパティは、パフォーマンスに役立つ場合はインデックス付けされることになっています。もしそうなら、なぜすべてが「内部的に」自動的に索引付けされないのですか?該当するプロパティに対してオン/オフにする必要があるのはなぜですか。また、プロパティにインデックスを付けない理由は何ですか。すべてに自動的に適用されない場合は、理由があるはずです。それは何でしょうか?