从给定的 class 引用创建动态对象并将列表中的值添加到它
Create dynamic object from given class reference and add values from list to it
我需要定义方法 'CreateClassInstance()',它将 class 引用作为参数。基于给定的 class 引用,它创建动态 class 实例并在 运行 时间从列表中分配值。出于测试目的,我定义了 TempUser class,实际上它可以是任何 class。我的目的是提供 class 参考和 excel 文件,它 return 映射对象与 excel 数据。
我写了 Activator.CreateInstance,它确实创建了 class 的实例,但我努力在创建的实例对象中添加值。
测试类
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();
}
你可以调用该类型的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...");
}
当然,您需要知道要设置的 属性 的名称。
您可以使用 GetProperties
方法获取类型的所有 public 属性的 PropertyInfo
:
PropertyInfo[] propertInfos = ReceiveClasstype.GetProperties();
我需要定义方法 'CreateClassInstance()',它将 class 引用作为参数。基于给定的 class 引用,它创建动态 class 实例并在 运行 时间从列表中分配值。出于测试目的,我定义了 TempUser class,实际上它可以是任何 class。我的目的是提供 class 参考和 excel 文件,它 return 映射对象与 excel 数据。
我写了 Activator.CreateInstance,它确实创建了 class 的实例,但我努力在创建的实例对象中添加值。
测试类
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();
}
你可以调用该类型的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...");
}
当然,您需要知道要设置的 属性 的名称。
您可以使用 GetProperties
方法获取类型的所有 public 属性的 PropertyInfo
:
PropertyInfo[] propertInfos = ReceiveClasstype.GetProperties();