根据标题,我可以找出属性或变量的历史记录,无论是否已设置?
原因是我有一些查询类,任何尚未设置的属性都不应包含在生成的查询中。
目前我只是尝试将一个PropertyInfo实例(我需要属性的名称,这对于由于映射而生成的查询至关重要)添加到已在set {}中设置的属性列表。这是丑陋的,因为它需要更多的代码,什么应该是只包含属性和没有逻辑的类(即不从列表中删除东西)。
我可以使用内置的内容还是更优雅的方法?
答案 0 :(得分:4)
假设您正在讨论动态实体,您可以使用反射检查null,但如果原始值为null(或者在数值数据类型的情况下为零),则不会告诉您任何内容。
但最佳方式是让它实现INotifyPropertyChanged并拥有已实现的属性列表。
public class Item : INotifyPropertyChanged
{
private List<string> _MaterializedPropertiesInternal;
private List<string> MaterializedPropertiesInternal
{
get
{
if (_MaterializedPropertiesInternal==null)
_MaterializedPropertiesInternal = new List<string>();
return _MaterializedPropertiesInternal;
}
}
private ReadOnlyCollection<string> _MaterializedProperties;
public IEnumerable<string> MaterializedProperties
{
get
{
if (_MaterializedProperties==null) _MaterializedProperties =
new ReadOnlyCollection<string>(MaterializedPropertiesInternal);
return _MaterializedProperties;
}
}
private int _MyProperty;
public int MyProperty
{
get { return _MyProperty; }
set
{
_MyProperty = value;
OnPropertyChanged("MyProperty");
}
}
protected void OnPropertyChanged(string propertyName)
{
if(PropertyChanged != null) PropertyChanged(this,
new PropertyChangedEventArgs(propertyName));
MaterializedPropertiesInternal.Add(propertyName);
}
public event PropertyChangedEventHandler PropertyChanged;
}
答案 1 :(得分:3)
使属性可以为空,例如类型int?
而不是int
类型,如果尚未设置,则其值为null
。