2013-08-24 99 views
-1

我必須以編程方式將數據導出到Excel。我有一個有幾個屬性的類。我想知道是否可以使用循環檢索所有屬性的值。例如:是否可以通過屬性獲取方法的值

public class SqueezeProperties 
{ 
    public int WidthField { get; set; } 
    public string Width_unit { get; set; } 
    public int ResPressure { get; set; } 
    public int DensityField { get; set; } 
    ...... 
} 

在寫脫穎而出,我的代碼:

t = typeof(SqueezeProperties); 
foreach (PropertyInfo field in t.GetProperties(BindingFlags.Public | BindingFlags.Instance)) 
       oSheet.Cells[r, c++] = field.Name; 

我們輸入值,是沒有辦法,我可以遍歷並找到可以訪問的所有屬性值的任何方式,並將它們存儲在Excel中?

我懷疑它是否可能。我只是教了自己如何訪問屬性名稱&它的細節,所以我想也許其他的事情也可能是可能的,我根本不知道它。

感謝

+0

'field.SetValue'?不知道你的問題是什麼,只要記住,反射電話也可能是耗時的 – Sayse

回答

0

您可以使用PropertyInfo.GetValue

(但是根據規範你的屬性的順序是不能保證是一樣的定義順序,所以爲了安全起見,你可能想訂購。)


此外,而不是讓他們通過反射,你可以手動創建一個集合,這將會照顧到訂單。

例如

var properties = new Expression<Func<SqueezeProperties, object>>[] 
{ 
    o => o.WidthField, 
    o => o.Width_unit, 
    //... 
}; 
foreach (var exp in properties) 
{ 
    var mem = (MemberExpression)exp.Body; 
    var prop = (PropertyInfo)mem.Member; 

    oSheet.Cells[r, c++] = prop.GetValue(squeezePropertiesInstance, null); 
} 
+0

你如何訂購它們?我不想設置值,我想從對象中檢索值並顯示它們。 – Tvd

+0

@Tvd:然後使用'GetValue'。關於排序,你必須有一些參考名單,例如。在這種情況下,您可能會使用第二種方法。 –

相關問題