2011-07-21 177 views
1

我需要使用相同的函數設置類的所有屬性。目前我正在使用反射來獲取所有屬性並循環設置它們的值。我知道所有的屬性,沒有什麼動態的發生。有沒有更好的方法來做到這一點沒有反思?

這裏是我的代碼,我目前在我的構造函數運行:

foreach (PropertyInfo property in this.GetType().GetProperties()) 
{ 
    // retreive the value and set it 
    property.SetValue(this, GetValue(field), null); 
}

有沒有辦法做到不使用反射類似的東西?

+3

源代碼省略了重要的方面...領域從哪裏來?你是否知道這個類,或者這個函數應該與不同的類一起工作? – Yahia

+0

您正在使用哪個版本的.NET? – mdm

+0

你爲什麼要在構造函數中這樣做?在構造函數中,你一定知道你的類有什麼屬性?!? – Yahia

回答

4

不是我知道基於這裏給出的信息。

這就是說,它乞求的問題是你在做什麼,這將需要你這樣做?爲什麼你需要迭代循環中的所有屬性,你有多少?

更多的細節可能會提示某人給你一個更好的解決方案。例如,這些屬性在做什麼?他們是否連接到一些可以在不使用反射的情況下進行更改的基礎數如果你有很多這樣的特性,那麼是否有一堆離散的特性要走?

+0

所有字段都映射到底層數據並在視圖中使用。我試圖避免的問題是允許輕鬆更改屬性(編輯,刪除,添加),並且由於它們都具有相同的值方法構造函數,我試圖避免更新許多地方的代碼以更改任何屬性。 – Victor

+0

所以,如果我理解正確,你有一個屬性被稱爲(例如)用戶名,你想要將它映射到具有相同名稱的字段,並且你想避免必須更新構造函數,如果你更改屬性/字段名稱。那麼你的問題的答案是不我相信,你必須使用反射來做到這一點。也就是說,我不完全確定它是一個明智的途徑去保存一些代碼更新。你多久更換一次域名? – iandotkelly

+0

我想我可能不得不單獨設置每個屬性,就像你說的。我認爲更新代碼的成本將低於反思成本。性能很重要。我會有很多這樣的課程,所以我正在嘗試確定最佳模式。 – Victor

1

嗯,也許我誤解了你的意思,但你說你知道所有的屬性,爲什麼不寫一個方法來設置它們?

void SetValues() { 
    this.Property1 = field1; 
    this.Property2 = field2; 
    this.Property3 = field3; 
    this.Property4 = field4; 
} 

我懷疑你的問題有一些缺失。

+0

這正是我想要做的,只是抽象的,因爲我的屬性會經常改變,我需要運行相同的函數獲取每個字段的值。 – Victor

+0

@Victor - 你如何聲明屬性 - 它們是「自動」屬性還是具有明確基礎數據的屬性? – iandotkelly

+0

@iandotkelly我不確定'自動'屬性是什麼意思。他們都有基礎數據。 – Victor

相關問題