Создать динамический объект из заданной ссылки на класс и добавить в него значения из списка
Мне нужно определить метод CreateClassInstance(), который принимает ссылку на класс в качестве параметра. На основании заданной ссылки на класс создает динамический экземпляр класса и во время выполнения присваивает значения из списка. для тестирования я определил класс TempUser, и в действительности это может быть любой класс. Моя цель - дать ссылку на класс и файл Excel, и он возвращает объект карты с данными Excel.
Я написал 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 ответ
Вы могли бы позвонить 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();