c#基于字符串设置变量值
我有一个包含变量列表的类(这里缩短为一个“a”)——我试图创建一种基于两个字符串输入填充变量的方法,因此我可以使用,例如:c#基于字符串设置变量值,c#,C#,我有一个包含变量列表的类(这里缩短为一个“a”)——我试图创建一种基于两个字符串输入填充变量的方法,因此我可以使用,例如: SET_VAL("a", "value_for_a") 我想让MessageBox只显示“value\u for\u a” 但我在尝试使用反射时遇到了麻烦,我确信这是可能的,我知道有可能使用字符串从变量中获取一个值来查找它的名称,因为每次我搜索它时,我似乎只得到了这个值,但为什么下面的操作不起作用呢?当我只想传递两个字符串时,Set
SET_VAL("a", "value_for_a")
我想让MessageBox只显示“value\u for\u a”
但我在尝试使用反射时遇到了麻烦,我确信这是可能的,我知道有可能使用字符串从变量中获取一个值来查找它的名称,因为每次我搜索它时,我似乎只得到了这个值,但为什么下面的操作不起作用呢?当我只想传递两个字符串时,SetValue
方法要求对象作为参数
public class MySystem_SubsNote
{
public string a;
public void SET_VAL(string mytype, string myvalue)
{
this.GetType().GetField(mytype).SetValue(myvalue);
MessageBox.Show(a);
}
}
正如Lasse在注释
SetValue
中提到的,需要两个参数,第一个是设置值的实例,第二个是新值。因此,这应该做到:
public void SET_VAL(string mytype, string myvalue)
{
this.GetType().GetField(mytype).SetValue(this, myvalue);
MessageBox.Show(a);
}
正如Lasse在注释
SetValue
中提到的,需要两个参数,第一个是设置值的实例,第二个是新值。因此,这应该做到:
public void SET_VAL(string mytype, string myvalue)
{
this.GetType().GetField(mytype).SetValue(this, myvalue);
MessageBox.Show(a);
}
为什么不只拥有一个
字典
,而不是任何特定的变量呢?你的代码无法编译。请先解决这个问题。FieldInfo.SetValue
的可能重复项需要两个参数,即设置字段和值的实例,您只需传递值。尝试.SetValue(this,myvalue)
当说“它不工作”时,告诉我们你为什么这么认为,如果你收到错误消息,请发布错误消息。为什么不只使用字典而不是任何特定变量?你的代码无法编译。请先解决这个问题。FieldInfo.SetValue
的可能重复项需要两个参数,即设置字段和值的实例,您只需传递值。尝试.SetValue(this,myvalue)代码>当说“它不工作”时,请告诉我们您为什么这样认为,如果您收到错误消息,请发布错误消息。谢谢,这是有道理的,但现在我得到的对象引用未设置为对象的实例。
在这一行。我不明白,因为我用另一种方法设置了它的一个实例,并且正在使用this
-当突出显示时-this
显示对象/类类型,那么我想GetField
确实返回null
。也许你的字段名有输入错误?我刚刚把它重新创建为一个小项目,效果很好,所以我认为在我的大项目中,我的字段名中可能有一个隐藏的空格(它是从一个巨大的字符串列表中单独解析出来的)-谢谢你的建议,将它标记为最佳答案,因为它确实有效!仅供参考,这不是一个字段问题,我在尝试不同的操作时,将“GetField”替换为“GetProperty”,但忘了将其更改回去:/Thank,这是有道理的,但现在我得到的对象引用未设置为对象的实例。
在这一行。我不明白,因为我用另一种方法设置了它的一个实例,并且正在使用this
-当突出显示时-this
显示对象/类类型,那么我想GetField
确实返回null
。也许你的字段名有输入错误?我刚刚把它重新创建为一个小项目,效果很好,所以我认为在我的大项目中,我的字段名中可能有一个隐藏的空格(它是从一个巨大的字符串列表中单独解析出来的)-谢谢你的建议,将它标记为最佳答案,因为它确实有效!仅供参考,这不是字段的问题,我在尝试不同的操作时,将“GetField”替换为“GetProperty”,但忘记将其更改回来:/