返回变量值,而变量名称位于字符串中

Returning variable value, while the variable name is in a string

提问人:another J.Doe 提问时间:11/12/2023 最后编辑:another J.Doe 更新时间:11/12/2023 访问量:71

问:

我有一个双变量名和一个声明为这样的字符串:

public double dblvar = 0;
public string str = "dblvar";

我试图做的是通过使用变量返回0str

有一些关于如何将字符串解析为双精度值或如何从字符串声明新变量名称的指南,但这不是我要找的。

我尝试过但效果不佳但可能很接近的东西是这样的:

double test = (double)this.GetType().GetField("dblvar").GetValue(this);

但即使这接近解决方案,它也要求我事先知道这是一个.虽然在我的示例中它实际上是一个 ,但我使用的其他变量可以是 。doubledoubleint

有什么建议吗?我什至不确定这是否可能。

问候

编辑:

许多人发表评论,询问我想要做什么的细节。 我想做的就是那里有什么,它是一个公共变量,没有嵌入到不同的类中,这不是一个 XY 问题,我想做的正是所描述的,我不想用字典来做,这将涉及更新我已经拥有的数百个变量。 我想知道这是否可能,正如所描述的那样。

C# 分析 变量

评论

0赞 MoonMist 11/12/2023
您希望在什么上下文中获取字段值?如果它们是类字段,那么我认为它们需要是公开的才能被 Reflection 访问。
0赞 Flydog57 11/12/2023
如果您有足够的权利,您可以反思私人成员。但是,你想做什么,如果我们知道这一点,我们可能会给你一个更好的答案
1赞 Jesse 11/12/2023
如果该字段不是公共字段,则需要在调用 时指定。您可以传递许多标志来确切地告诉它要查找的内容。在这种情况下,您可能希望第二个参数是 。GetFieldBindingFlags.Instance | BindingFlags.NonPublic
3赞 Jesse 11/12/2023
而且,这似乎是一个 XY 问题。请解释您实际想要做什么,而不仅仅是您的预期解决方案。可能有一个更好的解决方案。
1赞 Tim Schmelter 11/12/2023
我很确定你真的想要一个.然后你通过这种方式得到你的双精度值:.如果不确定密钥是否存在,请使用 TryGetValueDictionary<string, double>double d = dict["doublevar"];

答:

-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
虽然这可行,但任何具有反射经验的开发人员都会建议首选重新设计,因此您可以避免这种情况。