是否有可能对类属性的集合(或枚举)进行编码



我正在使用反射来比较给定类的对象。我只想比较某些属性。现在,我有一个简单的字符串集合,其中包含要比较的属性的名称。

类似于:

public static readonly ICollection<string> PROPERTIES_TO_COMPARE = new List<string>()
{
"Name",
"Phone"
};

然后我用它做一些类似的事情:

PropertyInfo[] properties = typeof(MyClass).GetProperties();
foreach (PropertyInfo property in properties)
{
if (PROPERTIES_TO_COMPARE.Contains(property.Name))
{
//compare
}
}

但如果下个月我将房产名称从";电话";至";电话号码";我需要记住编辑属性集合。我觉得自己没有那么值得信赖。

有更好的方法吗?也许是类似于(variable(的名称,所以编译器可以帮助我吗?或者也许我的整个方法都错了?

更新:这就是我需要做的(理想情况下使用更少的代码(:

if (oldVersion.Name != newVersion.Name)
{
changes.Add(new Change()
{
FieldName = nameof(oldVersion.Name),
OldValue = oldVersion.Name,
NewValue = newVersion.Name
});
}
if (oldVersion.Phone != newVersion.Phone)
{
changes.Add(new Change()
{
FieldName = nameof(oldVersion.Phone),
OldValue = oldVersion.Phone,
NewValue = newVersion.Phone
});
}
// and 15 properties more

您可以使用nameof(MyClass.Name)代替"Name",使用nameof(MyClass.Phone)代替"Phone",这样就解决了重命名问题。然而,老实说,我会改为:

static bool ConsideredEqual(MyClass x, MyClass y)
=> x.Name == y.Name && x.Phone == y.Phone;

并使用该方法而不是所有的反射代码-完全相同的维护开销,但比反射快得多。

相关内容

  • 没有找到相关文章

最新更新