1

我需要关于如何处理类结构的帮助。我该如何使用Indexers?我想要类似的东西

Company.Employees[empId].Employee["Designation"].Salary

更具体地说,像 Grid.Rows[rowIndex].Columns["CurrentColumnName"].Width

4

3 回答 3

2

添加一个方法,如

 public string this[string s]
 {
     get{
         if(s == ...)
          return this.property;
     }

 }

然而,这似乎更像是一种情况Collections,但请参阅此处以获取完整示例。

于 2013-04-01T19:56:20.313 回答
1

实际上,索引器用于按索引获取元素,而您的 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);
        }
    }
}
于 2013-04-01T20:11:14.697 回答
0

我宁愿有一个方法,因为我可以让它通用。

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。所以宁愿把事情分解一下,有更多的行,然后你解决错误的麻烦就更少了。

于 2013-04-01T20:20:05.770 回答