c# - 有没有一种更高效的方法来使用反射从循环内的 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 属性。有没有办法避免每次迭代的反射?
解决方案
我想我明白这个问题..
..对于我希望能够以非反射方式枚举类属性的情况,我将数据存储在字典中:
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; }
}
}
推荐阅读
- python - 在 Python 中使用 ipywidget 时水平滚动条不起作用
- xamarin.forms - Xamarin.iOS MessagingRemoteException:Build1660001055
- reactjs - 将对象推送到状态为 React ERROR 的数组(对象无效...)
- python - 为什么我不能抓取我想要的表格?
- jenkins-pipeline - 使用 untilEach openshift jenkins 客户端插件检查 openshift 中上次构建的状态
- c++ - 我可以强制提升在 Windows 上更喜欢正斜杠吗?
- odoo - 如何从 Odoo13 中的自定义模块生成发票?
- c - 有没有办法在没有所有重复 if 语句的情况下完成以下循环?
- json - 在角度2+的连接方法中插入html标签不起作用
- python - Python-为什么即使我输入了应该可以使用的密码,它也会说密码被拒绝?