【发布时间】:2014-12-09 20:38:18
【问题描述】:
所以我有 2 个类,它们都有相同的属性名称。一类包含不同的变量:int、strings、bool 和 DateTime 第二类仅包含 1 个 int,其余均为字符串。
现在我想遍历所有属性,从 class1 中获取值,加密该数据并将其保存为 obj2 中的字符串,然后将其返回到主窗体(稍后将其保存在数据库中)。
public PersoonEncrypted EncryptPersonClass(Class1 object1)
{
PersoonEncrypted persEncrypt = new PersoonEncrypted(); //second class obj
Type type = object1.GetType();
PropertyInfo[] properties = type.GetProperties();
Type type2 = persEncrypt.GetType();
PropertyInfo[] properties2 = type.GetProperties();
foreach (var bothProperties in properties.Zip(properties2, (obj1, obj2) => new { Obj1 = obj1, Obj2 = obj2 }))
{
string value = "";
value = bothProperties.Obj1.GetValue(object1) as string;
if (!string.IsNullOrWhiteSpace(value))
{
string encryptValue = Encrypt(value);
if ((bothProperties.Obj2 != null) && (bothProperties.Obj2.PropertyType == typeof(string)))
{ //!= null check has no effect at all
bothProperties.Obj2.SetValue(persEncrypt, encryptValue, null); //errorLine
}
}
}
return persEncrypt;
}
这是我到现在为止的想法。
当然,我已经搜索了其他解决方案like this one。在应用了一些自己的更改之后,它没有返回任何错误,但它没有将任何加密字符串保存到类 persEncrypt 中。我从那个测试中得出的结论是,它正在测试特定属性的第二类(在我的示例中为persEncrypt)中的值是否为空,虽然它不应该那样做,但它应该创建一个新实例该变量并将其保存在对象类中,但删除该检查给了我同样的错误。
【问题讨论】:
标签: c# reflection types propertyinfo setvalue