Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何';选择';对象字段,当您只有一个具有确切名称的字符串作为对象字段时_C#_.net - Fatal编程技术网

C# 如何';选择';对象字段,当您只有一个具有确切名称的字符串作为对象字段时

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添加值的

很抱歉,如果标题不清楚,很难正确表达这个问题

我有一个名为Stuff和MoreStuff的对象

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");

}