C# 如何';选择';对象字段,当您只有一个具有确切名称的字符串作为对象字段时
很抱歉,如果标题不清楚,很难正确表达这个问题 我有一个名为Stuff和MoreStuff的对象C# 如何';选择';对象字段,当您只有一个具有确切名称的字符串作为对象字段时,c#,.net,C#,.net,很抱歉,如果标题不清楚,很难正确表达这个问题 我有一个名为Stuff和MoreStuff的对象 public class Stuff() { public string Field1; public string Field2; } public class MoreStuff() { public string Field3; public string Field4; } 当字符串fieldValue='Field1'时,我想创建一个向Field1添加值的
public class Stuff()
{
public string Field1;
public string Field2;
}
public class MoreStuff()
{
public string Field3;
public string Field4;
}
当字符串fieldValue='Field1'时,我想创建一个向Field1添加值的东西
更清楚地说,是这样的。但我想让它对任何对象都通用:
string fieldValue = 'Field1'
Stuff thing = new Stuff();
checkField(fieldValue);
thing.fieldValue = 'checked';
string fieldValue = 'Field4'
MoreStuff moreThing = new MoreStuff();
checkField(fieldValue);
moreThing.fieldValue = 'checked';
在C#中可以这样做吗?我找不到任何关于它的信息,也很难找到像这样的问题。您可以使用反射:
string fieldName = "Field1";
Stuff thing = new Stuff();
thing.GetType().GetField(fieldName).SetValue(thing, "checked");
这使用System.Reflection通过它的声音大致完成您想要的功能 使用反射,但这听起来可能是一个错误。您可以使用反射按名称获取字段的值,但不能只是简单地向对象添加字段。你可以用一个ExpandoObject,但不能用普通类,至少不能不用IL-Weven。可能的重复感谢,反射正是我想要的。字段的添加只是我的一个坏例子。谢谢,我不知道反射。
Square test = new Square();
test.Field1 = "sdflsjf";
test.Field2 = "sdlfksj";
test.Field3 = "sldfjs";
foreach (PropertyInfo propertyInfo in test.GetType().GetProperties())
{
if (propertyInfo.Name == "Field2")
propertyInfo.SetValue(test, "checked");
}