从给定的类引用创建动态对象,并将列表中的值添加到

时间:2017-04-10 11:13:54

标签: c# dynamic .net-4.0 excel-interop

我需要定义方法' CreateClassInstance()'以类引用为参数。基于给定的类引用,它创建动态类实例,并在运行时从列表中分配值。出于测试目的,我已经定义了TempUser类,实际上它可以是任何类。我的目的是给出类引用和excel文件,并返回带有excel数据的map对象。

我编写了Activator.CreateInstance,它创建了类的实例,但我努力在创建的实例对象中添加值。

识别TestClass

public class TempUser
{
    public string CollarID { get; set; }
    public string Email { get; set; }
    public string IMEI { get; set; }
    public string Forename { get; set; }
    public string Surname { get; set; }
}

public void processRequest()
{
  CreateClassInstance<TempUser>()
}

...

public void CreateClassInstance<T>()
{
  Type ReceiveClasstype = typeof(T);
  T newObject = (T)Activator.CreateInstance(typeof(T));

   //need help here to create object and add values to it.
    ?????????????????
}

这相当于我想要的CreateClassInstance方法

List<TempUser> TempUserListObject = new List<TempUser>();
List<string> TempObjectDataList = new List<string>();

for (int i = ReadExcelRowFrom; i <= rowCount; i++)
{
    for (int j = 1; j <= colCount; j++)
    {
        if (j == 1)
        {
            Console.Write("\r\n");
        }

        if (xlRange.Cells[i, j] != null && xlRange.Cells[i, j].Value2 != null)
        {
            TempObjectDataList.Add(xlRange.Cells[i, j].Value2.ToString());



            Console.Write(xlRange.Cells[i, j].Value2.ToString() + "\t");
        }
        else
        {
            TempObjectDataList.Add("");
        }

    }

    TempUserListObject.Add(new TempUser()
    {
        CollarID = TempObjectDataList[0],
        Email = TempObjectDataList[1],
        IMEI = TempObjectDataList[2],
        Forename = TempObjectDataList[3],
        Surname = TempObjectDataList[4],
        Station = TempObjectDataList[5],
        Rank = TempObjectDataList[6],
        Department = TempObjectDataList[7],
        Division = TempObjectDataList[8],
        Area = TempObjectDataList[9],
        SupCollarID = TempObjectDataList[10],
        AccessRights = TempObjectDataList[11]
     });
    TempObjectDataList.Clear();
}

1 个答案:

答案 0 :(得分:1)

您可以调用该类型的GetProperty方法获取PropertyInfo,然后调用此方法的SetValue方法来设置特定实例的属性,例如:

public void CreateClassInstance<T>()
{
    Type ReceiveClasstype = typeof(T);
    T newObject = (T)Activator.CreateInstance(typeof(T));

    //set the CollarId property of newObject:
    var property = ReceiveClasstype.GetProperty("CollarID ");
    property.SetValue(newObject, "collar id value...");
}

当然,您需要知道要设置的属性的名称。

您可以使用PropertyInfo方法获取某个类型的所有公共属性的GetProperties

PropertyInfo[] propertInfos = ReceiveClasstype.GetProperties();