2011-10-25 53 views
0

我處於需要從方法返回匿名類型的對象的情況,使用dynamic作爲返回類型是個好主意嗎?需要考慮什麼?作爲返回類型的動態

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

回答

3

是的,它具有意義如果「保證書」,你會總是與一些特點返回一個對象,具有Id例如(忽略也許它會更好地使用接口)

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

Console.WriteLine(MyMethod().Id); 

所以,如果你保證所有的物品都可以Turn Left-Right但你不能保證它們是飛機,汽車,摩托車,船隻。 (所以它的好,如果你正在做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.

請注意,如果你再好好反思你的對象,它可以成爲醜陋:How do I reflect over the members of dynamic object?

+0

不,我不想反映,我只是想通過JSON返回它(實際上該方法實際上是一種MVC操作方法),並忘記它。儘管我使用持有者類的接口。 –

+0

@LordCover然後它不應該是非常重要的。 JSON解析器必須反映該對象。 – xanatos

+0

+1我實現了它,它工作得很好,任何額外的筆記? –

4

它沒有任何意義,您可以返回object具有相同的效果。

P.S .:同樣,匿名類型不如返回類型。

+0

特別不好的返回類型,因爲他們內部。如果您返回裝配體邊界之外,則會收到運行時綁定錯誤。在返回動態時,ExpandoObject是匿名的更好選擇。 – jbtule

0

返回動態對象確實有讓您訪問的benifit沒有使用反射的anonmymous類型的屬性(儘管沒有intellisense)。如果採取這種方法,您需要確保匿名類型的屬性與您在動態對象上訪問的內容相匹配。否則,你會得到運行時錯誤

不過,我建議你考慮返回的具體類型,而不是