我需要关于如何处理类结构的帮助。我该如何使用Indexers
?我想要类似的东西
Company.Employees[empId].Employee["Designation"].Salary
更具体地说,像 Grid.Rows[rowIndex].Columns["CurrentColumnName"].Width
我需要关于如何处理类结构的帮助。我该如何使用Indexers
?我想要类似的东西
Company.Employees[empId].Employee["Designation"].Salary
更具体地说,像 Grid.Rows[rowIndex].Columns["CurrentColumnName"].Width
添加一个方法,如
public string this[string s]
{
get{
if(s == ...)
return this.property;
}
}
然而,这似乎更像是一种情况Collections
,但请参阅此处以获取完整示例。
实际上,索引器用于按索引获取元素,而您的 EmpId 不是索引的良好候选者,因为它们可能是堆肥或非连续的。
如果您仍然想使用它,这里是代码。它将模仿索引器,但它的修改版本。
class Employee
{
public int EmpId { get; set; }
public float Salary { get; set; }
public string Designation { get; set; }
}
class Employees
{
List<Employee> EmpList = new List<Employee>();
public Employee this[int empId]
{
get
{
return EmpList.Find(x => x.EmpId == empId);
}
}
}
我宁愿有一个方法,因为我可以让它通用。
public T GetPropertyValue<T>(string property)
{
var propertyInfo = GetType().GetProperty(property);
return (T)propertyInfo.GetValue(this, null);
}
var emp = employee.GetPropertyValue<Employee>("Designation");
var salary = emp.Salary;
也就是说......小心有这么多的点符号。当您在日志文件的行中获得 NullReferenceException 时,很难找出究竟是什么为 null。所以宁愿把事情分解一下,有更多的行,然后你解决错误的麻烦就更少了。