我需要定义方法' CreateClassInstance()'以类引用为参数。基于给定的类引用,它创建动态类实例,并在运行时从列表中分配值。出于测试目的,我已经定义了TempUser类,实际上它可以是任何类。我的目的是给出类引用和excel文件,并返回带有excel数据的map对象。
我编写了Activator.CreateInstance,它创建了类的实例,但我努力在创建的实例对象中添加值。
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();
}
答案 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();