首页 > 解决方案 > 有没有一种更高效的方法来使用反射从循环内的 propertyName 获取类的属性值?

问题描述

public class Product
{
    public string Title;
    public string Description;
    public string Copy;
}

 

public void setCopyProperty(List<product> products, string propertyName)
{
    foreach(var product in products)
    {
        var propertyValue = //refection
        product.Copy = propertyValue;
    }
}

我正在遍历产品列表并尝试使用我必须动态获取的属性值来设置 Copy 属性。有没有办法避免每次迭代的反射?

标签: c#asp.net-core

解决方案


我想我明白这个问题..

..对于我希望能够以非反射方式枚举类属性的情况,我将数据存储在字典中:

public class X{

  private Dictionary<string, object> _values = new Dictionary<string, object>();

  public string Y { 
    get{ return (string)_values[nameof(Y)]; }
    set{ _values[nameof(Y)] = value; }
  }

  public int Z { 
    get{ return (int)_values[nameof(Z)]; }
    set{ _values[nameof(Z)] = value; }
  }
}

可以枚举字典,键是属性名称等。如果有特殊的性能考虑,例如您不想为数百万次获取命中字典哈希/强制转换,并且具有不频繁的集合,则可以使用普通的后备变量以及字典;更新它们,但只获取变量

public class X{

  private Dictionary<string, object> _values = new Dictionary<string, object>();

  private string _y;
  public string Y { 
    get{ return _y; }
    set{ _values[nameof(Y)] = _y = value; }
  }

  private int _z;
  public int Z { 
    get{ return _z; }
    set{ _values[nameof(Z)] = _z = value; }
  }
}

推荐阅读