Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# - Fatal编程技术网

c#基于字符串设置变量值

c#基于字符串设置变量值,c#,C#,我有一个包含变量列表的类(这里缩短为一个“a”)——我试图创建一种基于两个字符串输入填充变量的方法,因此我可以使用,例如: SET_VAL("a", "value_for_a") 我想让MessageBox只显示“value\u for\u a” 但我在尝试使用反射时遇到了麻烦,我确信这是可能的,我知道有可能使用字符串从变量中获取一个值来查找它的名称,因为每次我搜索它时,我似乎只得到了这个值,但为什么下面的操作不起作用呢?当我只想传递两个字符串时,Set

我有一个包含变量列表的类(这里缩短为一个“a”)——我试图创建一种基于两个字符串输入填充变量的方法,因此我可以使用,例如:

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”,但忘记将其更改回来:/