2013-08-24 3 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'. Что касается заказа, вам нужно будет, например, иметь некоторый список ссылок на имена. В этом случае вы можете использовать второй метод. –