2012-02-16 20 views
1

最近、私はC#4.0(DynamicObject、ExpandoObjectなど)で導入された派手な新しい動的キーワードを使用して検討してきました。新しい紹介ではいくつかの用途(およびいくつかの落とし穴)を特定できます私のプロジェクト、そしてこの質問のために、私は後でバインドされた文字列ベースのインデックス付きコレクションをクリーンアップし、より安全なものにすることを検討しています。すべてが順調と良い動的実行時オブジェクトの作成:IntelliSenseを維持しますか?

Car car1 = CARWarehouse1.Honda 

これは(CARWarehouse1は今DynamicObjectsベースを拡張している)

Car car1 = CARWarehouse1["Honda"]; 

そして、私が今できるダイナミクスWITH、およびから:

だから、ダイナミクス前に私が持っていました私は私が望んでいたものを達成したように見えますが、私は持っていますか? 私はコンパイル時にどちらのメソッドでも、参照している車のタイプを誤って入力する必要がありますが、コンパイラには問題はありませんが、実行時に問題が発生します。

そこで、私が本当に必要なのは時間のプロパティのチェック、およびインテリセンスのサポートをコンパイルしています。だから私はそれをすることができますか?

私はこの能力を持っているが、このような部品番号などのライブラリアウトがあることを知っており、ReSharperのはインテリセンス内のサポートのいくつかの並べ替えを与えるが、私はより丸みを帯びた解決策を探しています。

すべてのアイデアは、大きな、小さな、簡単または複合体は歓迎されています。

+2

あなたCARWarehouse1(ところで奇数総額は)*それは 'Honda'ではなく、' Honder'を持っていることをコンパイル時に*を知っていますか?そうでない場合、コンパイラはどのようにして文句を言うことができますかもしそうなら、どうして静的なタイピングを使っていないのですか? –

+0

ええ、プロジェクトで実際にCARWarehouse1は使用されていません。その例は、データベースがXMLやXMLなどを介して実行時にCarWarehouseに追加されるため、車に強く入力する必要はありません。あなたの言っていることが分かりますが、Intellisenseが実際にメソッドを実行し、動的プロパティを返すための方法があることを期待していました。 linqエンティティの場合のように、コード生成のルートを調べることに満足しています。可能なことを知りたいだけです –

+1

どのデータベースを見るのですか?あなたのプロダクション?テスト?他に何か?あなたがコンパイルしている間に本当に*データベース呼び出しをしたいですか?あなたがデータベースを持っているネットワークではないなら...ここで間違っているかもしれない事を考えてみてください... –

答えて

4

いいえ、そのようなものは動的なタイプではありません。何かをチェックする方法がないため

基本的にコンパイラはちょうどdynamicとしてマークされた変数のすべてのチェックをスキップします。動的オブジェクトのプロパティは実行時に作成されるため、コンパイル時にコードをチェックして正確性を確認することはできません。コンパイル時のチェックとインテリセンスが重要な場合

+0

悲しいことだが真実だが、彼らはintellisenseにコメントするための注釈のようなものをサポートすることを考えなければならない。... PHPは同様のことをする... –

1

dynamicを使用しないでください。オブジェクトのスコープがかなり小さい場合は、代わりに匿名の型を使用できますが、自分の状況に適した印象を得ることはできません。私はあなたが必要とするタイプを定義し、コーディング時に予測できない任意のプロパティの辞書やハッシュテーブルに固執することをお勧めします。

関連する問題