提问人:another J.Doe 提问时间:11/12/2023 最后编辑:another J.Doe 更新时间:11/12/2023 访问量:71
返回变量值,而变量名称位于字符串中
Returning variable value, while the variable name is in a string
问:
我有一个双变量名和一个声明为这样的字符串:
public double dblvar = 0;
public string str = "dblvar";
我试图做的是通过使用变量返回0
str
有一些关于如何将字符串解析为双精度值或如何从字符串声明新变量名称的指南,但这不是我要找的。
我尝试过但效果不佳但可能很接近的东西是这样的:
double test = (double)this.GetType().GetField("dblvar").GetValue(this);
但即使这接近解决方案,它也要求我事先知道这是一个.虽然在我的示例中它实际上是一个 ,但我使用的其他变量可以是 。double
double
int
有什么建议吗?我什至不确定这是否可能。
问候
编辑:
许多人发表评论,询问我想要做什么的细节。 我想做的就是那里有什么,它是一个公共变量,没有嵌入到不同的类中,这不是一个 XY 问题,我想做的正是所描述的,我不想用字典来做,这将涉及更新我已经拥有的数百个变量。 我想知道这是否可能,正如所描述的那样。
答:
-2赞
another J.Doe
11/12/2023
#1
我整理的代码实际上是在一个新项目中工作的。感谢您的回复。
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace WindowsFormsApp1
{
public partial class Form1 : Form
{
public double dblvar = 3;
public string str = "dblvar";
public Form1()
{
InitializeComponent();
MessageBox.Show(dblvar.ToString() + " " + str);
double test = (double)this.GetType().GetField("dblvar").GetValue(this);
MessageBox.Show(test.ToString());
}
}
}
评论
1赞
Fildor
11/12/2023
虽然这可行,但任何具有反射经验的开发人员都会建议首选重新设计,因此您可以避免这种情况。
下一个:奥丁项目石头、纸、剪刀游戏
评论
GetField
BindingFlags.Instance | BindingFlags.NonPublic
TryGetValue
。Dictionary<string, double>
double d = dict["doublevar"];