2009-11-29 86 views
2

我有一個keyvaluepair(字符串,字符串)列表的第一個字符串是類似class.property,第二個字符串是分配給該class.property的值。爲此使用反射,有沒有另一種方法?

我目前正在通過該列表循環,並通過使用反射設置每個值。

它的工作,但我的問題是有更快的方式來做到這一點?

+1

如果你只有2串,我認爲反射是你可以在這裏使用的所有東西。 – brendan 2009-11-29 15:36:31

回答

3

如果您反覆使用相同的屬性(例如針對各種目標對象),則使用Delegate.CreateDelegate並使用build a delegate out of the setter的速度會更快。但是,我只會在我分析它時發現這是瓶頸。它碰巧對我的協議緩衝區實現產生了很大的影響,但這確實需要儘可能快,所以我很樂意應用一些微優化。

+0

有趣的是,現在讀博客 – Fredou 2009-11-29 15:49:18

+0

不幸的是,我的keyvaluepair列表可以包含近百項,每一個都調用一個獨特的class.property。該鏈接已加入書籤,因爲我很確定我將在稍後使用它,謝謝 – Fredou 2009-11-29 15:59:45

+0

如果您只打算使用一次屬性,那麼直接使用反射進行反射的速度將快於它得到。 – 2009-11-29 16:06:34

0

如果您需要多次在同一類型上設置相同的屬性或屬性,請緩存Type和PropertyInfo的屬性。緩存是非常容易的事情 - 並且檢查類型是反映場景中通常需要花費的時間。

如果您可以使用C#4進行此操作,則可以使用dynamic來提供更快的解決方案。 (我見過.NET 3.5標籤,只是想我會提到它)。

+0

動態不會(很容易)在這裏工作 - 在C#4中的動態輸入可以讓你輕鬆地使用一個在編譯時已知的名稱,而不是靜態類型導出它 - 但是你必須做相當數量的工作才能對一個只能通過字符串提供的名稱進行此操作。無可否認,你可以創建一個Python腳本,然後運行它:) – 2009-11-29 15:49:06

相關問題