将自定义类的列表转换为对象数组

nik*_*nik 2 c# excel-dna

我有一个自定义类的列表,其中包含double,string等类型的各种变量.

为了使用Excel DNA将其返回到excel,我需要将列表转换为object[,].

这是我做的,但有更好的方法吗?如果我添加另一个变量,我需要记住重做列数等.

List<customclass> BMrep = somefunction();
var retdata = new object[BMrep.Count,22];

for (int i = 0; i < BMrep.Count; i++)
{
    retdata[i, 0] = BMrep[i].product_code;
    retdata[i, 1] = BMrep[i].RG;
    ...
}

return retdata;
Run Code Online (Sandbox Code Playgroud)

Tim*_* S. 6

您可以使用反射来获取属性:

var properties = typeof(customclass).GetProperties(BindingFlags.Public | 
                          BindingFlags.Instance).OrderBy(x => x.Name).ToList();

List<customclass> BMrep = somefunction();
var retdata = new object[BMrep.Count, properties.Count];

for (int i = 0; i < BMrep.Count; i++)
{
    for (int j = 0; j < properties.Count; j++)
    {
        retdata[i, j] = properties[j].GetValue(BMrep[i], null);
    }
}

return retdata;
Run Code Online (Sandbox Code Playgroud)