Я использую библиотеку FileHelper. На самом деле я хочу записать ошибки после прочтения файла. поэтому при записи ошибок мне нужно имя свойства сопоставленного класса. Так как я могу это сделать.
скажем, мой класс -
public class Employee
{
public string EmployeeName;
public string EmployeeCity
}
для этого класса let say employeename
является обязательным, поэтому я буду проверять свою запись после чтения файла, поэтому теперь я хочу записать сообщение о том, что "EmployeeName является обязательным", поэтому я хочу, чтобы EmployeeName
приходилось динамически. могу ли я это сделать?
Думаю, вам нужны размышления. Вы можете использовать YourClassInstance.GetType().GetProperties()
чтобы получить список свойств объекта. public string EmployeeName;
- его поле. public string EmployeeName {get;set;}
- его пропеллер. Но вы упомянули обязательный. Как вы признаете обязательным? Я могу предположить, что вы отмечаете их как особый атрибут:
[AttributeUsage(AttributeTargets.Property)]
public class MandatoryAttribute:System.Attribute
{
}
public class Employee
{
[Mandatory]
public string EmployeeName{get;set;}
[Mandatory]
public string EmployeeCity{get;set;}
public string EmployeeAccount{get;set;}
}
Теперь, чтобы получить список имен обязательных реквизитов объекта, вы можете сделать следующее:
Employee c=new Employee();
var propNames= c.GetType().GetProperties().Where(pinf=>pinf.GetCustomAttributes(true).FirstOrDefault(a => a.GetType()==typeof(MandatoryAttribute))!=null).ToList().Select(d=>d.Name);
Это даст вам список, содержащий {"EmployeeName", "EmployeeCity"}
РЕДАКТИРОВАТЬ
var EmployeeCollection=Helper.GetEmployees();
foreach(var employee in EmployeeCollection)
{
foreach(var prop in employee.GetType().GetProperties())
{
string val=(string)prop.GetValue(employee,null);
if(String.IsNullOrEmpty(val)) Helper.Log(prop.Name);
}
}