2011-10-25 11 views
0

私は、メソッドから匿名型のオブジェクトを返す必要がある状況にあります。返り値の型としてdynamicを使用することをお勧めしますか?どのような考慮事項が必要ですか?戻り値の型としての動的

public dynamic MyMethod() 
{ 
    // process and return the object of an anonymous type 
} 

答えて

3

は、はい、それは感覚を持っている場合は、常に

public dynamic MyMethod() 
{ 
    var temp = new ExpandoObject(); 
    temp.Id = 5; 
    return temp; 
} 

Console.WriteLine(MyMethod().Id); 
(おそらくインターフェイスを使用する方がよいだろうと無視して)例えばIdで、いくつかの特徴
を持つオブジェクトを返しますあなたの「保証」

したがって、すべてのオブジェクトがTurn Left-Rightになることが保証されていれば、飛行機、自動車、モト、ボートであるかどうかは保証されません。アクセスにあなたを可能にするbenifitを持っていない動的オブジェクトを返すHow do I reflect over the members of dynamic object?

+0

いいえ、私は反映したくありません、私はちょうどJSON(メソッドは実際にはMVCアクションメソッドです)を返して、それを忘れてしまいます。私はホルダークラスのインターフェイスを使用しています。 –

+0

@LordCoverその後、それは本当に重要ではありません。 JSONパーサーはオブジェクトを反映する必要があります。 – xanatos

+0

+1私はそれを実装しました。 –

4

これは何の意味もなく、objectと同じ効果を戻すことができます。

P .:また、匿名型は戻り値の型としてはあまりよくありません。

+0

代わりにコンクリートの型を返す検討することをお勧め。また、アセンブリ境界の外側に戻った場合、実行時バインディングエラーが発生します。 ExpandoObjectは、動的を返すときの匿名の方が良い代替手段です。 – jbtule

0

:あなたは、あなたのオブジェクトに反映させる必要がある場合、それは醜くなることを

注意(あなたがDuck typingWhen I see a bird that walks like a duck and swims like a duck and quacks like a duck, I call that bird a duck.を行っている場合ので、それは良いことです) (インテリセンスなしではあるが)反射を使用せずに無声型からの特性。この方法をとる場合は、匿名型のプロパティと動的オブジェクトでアクセスしているものが一致することを確認する必要があります。そうしないと、ランタイムエラーに

を取得しますしかし、私はあなたが彼らが内部のために戻り値の型として具体的には良くない