問題タブ [collection-initializer]
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# - リスト プロパティの空のコレクション初期化子が null になる
このコードを実行するThisIsAList
と、期待どおりに空のコレクションに初期化されません...代わりThisIsAList
にnullでした。
なぜこれはコンパイルエラーではないのですか? 結果はなぜnull
ですか?
ここで暗黙の変換が行われているのではないかと思っていましたが、次の試行でコンパイル エラーが発生しました。
コレクション初期化子に関するMSDNのドキュメントによると、コレクション初期化子は基本的に呼び出しAdd()
を処理するだけのようです。そこで、 への可能なオーバーロードを探しましたがList.Add
、適用できると思われるものは見つかりませんでした。
誰かがここで何が起こっているのかを C# 仕様から説明できますか?
c# - EF7 はコレクション初期化子をサポートしますか?
C# 6 では、オブジェクトとコレクションの初期化方法にいくつかの優れた機能が追加されました。
たとえば、次のコードは C#6 で有効です。
そのため、読み取り専用のコレクション プロパティを持つオブジェクトの初期化式を記述できるようになりました。
また、エンティティを組み立てる方法を EF に伝える必要がある場合もあります。
ここでEmails
、プロパティは書き込み可能である必要があります。しかし、上位のコードを使用すると、読み取り専用にして次のようにコードを書き直すことができます。
実際には、これは後でクライアント上で変換された匿名型の DTO ( AsEnumerable()
) を必要なエンティティに導入することで実現できます。それでも、その機能を EF7 自体でサポートしたいと考えています。
c# - Matrix クラスのクリーンなカスタム オブジェクト初期化子を実装する方法
Matrix
double[,] が使用できるものと同様のカスタム オブジェクト初期化子を実装したい カスタム クラスがありますが、実装方法がわかりません。
理想的には、私はそれがこのようになりたいと思っています
今のところ、署名付きの通常のコンストラクターがあります
このような呼び出しを受け入れる
IEnumerable<double[]>
および、インターフェイスを継承し、public voidAdd(double[] doubleVector)
メソッドを実装することにより、次の使用を受け入れるオブジェクト初期化子
Add
オブジェクト初期化子を使用しようとすると、X個の引数を取る ためのオーバーロードがないというコンパイラエラーが発生します。ここで、Xは作成しようとしている列の数です(つまり、提供された例3)。
提供したような引数を受け取るようにクラスを設定するにはどうすればよいですか?
c# - オブジェクト初期化子が Add メソッドを呼び出しているかどうかを判断するにはどうすればよいでしょうか?
Vector
いくつかの方法で初期化できるカスタムクラスがあります。すべてゼロで指定された長さのベクトルを作成する次のコンストラクターがあります。
または、実装することでオブジェクト初期化子を使用し、このようIEnumerable
なAdd(..)
メソッドを使用して、指定されたベクトルを埋めることができます
問題は、次のコードを記述できるという事実にあります。
これは問題ないように見えますが、最初の 3 つの値が 0 で、次の 3 つの値が 1、2、5 である長さ 6 のベクトルを作成することになります。理想的には、これは値が 1、2、5 で長さ 3 のベクトルを返すだけです。私はこれのオブジェクトの初期化を経験し、ステップを踏みましたが、オブジェクトが作成されていることを示す兆候はないようです。コンストラクターが実行され、3 つのAdd()
メソッドが呼び出されているように見えます。Add()
メソッドを呼び出しているのがオブジェクト初期化子であることを確認し、メソッドが追加の値を作成しないように保護するにはどうすればよいですか?
psコメントセクションで明らかなように、このクラスのAPIは、質問にあるように優れていません。まだ進行中の作業ですが、私のアイデアをもう少し洗い流すのに役立ったので、コメントに感謝します. コメントが意味を成すように、質問をそのままにしておきます。
c# - クラスのコレクションメンバーを初期化する
コレクションプロパティを持つクラスがあります:
現在、クラスの 2 つの異なるインスタンスを作成しています。
プロパティのセッターが存在しない(またはこの場合はパブリックにアクセスできない)ため、コンパイラーが後者について不平を言うことを理解しています。ただし、最初は割り当てでもあります-コレクション初期化子ではありますが。
コレクション初期化子は取得専用プロパティに対して許可されていると思います。これらは呼び出しているだけで、実際にはプロパティのゲッターを呼び出していないためですAdd
。IList
これは正しいですか?