C# 找不到属性的setvalue方法
我试图找到一种方法来遍历任何对象中的所有字段 首先,我尝试使用投影来获取值字段并打印它们,这非常有效:C# 找不到属性的setvalue方法,c#,C#,我试图找到一种方法来遍历任何对象中的所有字段 首先,我尝试使用投影来获取值字段并打印它们,这非常有效: var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" }; foreach (PropertyInfo property in ob.GetType().GetProperties()) { Console.WriteLine(pro
var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" };
foreach (PropertyInfo property in ob.GetType().GetProperties())
{
Console.WriteLine(property.Name + " val " + property.GetValue(ob));
}
但是,当然,我想将字段设置为一些新值,因此在阅读之后,看起来应该可以这样做:
foreach (PropertyInfo property in ob.GetType().GetProperties())
{
property.SetValue(ob,"new String");
}
这给了我“找不到属性集方法”。
我还尝试将null作为参数,这在某些地方可以实现:
property.SetValue(ob,"new String",null);
这也有同样的结果。
为什么我会失败
编辑:
有人向我指出,我没有充分描述我的目标。如上所述,目标是迭代任何对象中的字段,就像下面的示例对象:
var ob = new {DeclarativeSecn = "da" , sksksk = "dingdong" };
在最初的问题中,我写了“我想将字段设置为一些新值”,这意味着我想迭代“ob”对象中的字段,并将它们设置为一个新值
多谢各位
为什么我会失败
因为和写作一样的原因
ob.DeclarativeSecn=“新值”;
将在编译时失败,至少对于您给出的示例是这样。您的对象是匿名类型,匿名类型上的属性只有getter——它们不允许您为属性设置新值。如果希望以后能够修改属性,请不要使用匿名类型
请注意,您的问题谈到了迭代任何对象的属性,但是:
- 打印时,假设所有属性都有getter;这通常是正确的,但并不总是如此
- 设置新值时,假设所有属性都有getter,并且它们是字符串属性
似乎无法在只读属性上设置值。听起来很合理。是的,谢谢你,你知道有什么好方法可以创建非匿名内联对象吗?这样我就不必在简单的测试中创建一个新类了?@n00bster:就您所展示的,您可以使用
字典来代替。我们真的不知道你想达到什么更大的目的。