C#使用字符串动态访问方法值

C#使用字符串动态访问方法值,c#,C#,我目前正在通过此方法设置一些字符串: string marketlabel = allmarketdata.@return.markets.COLXPM.label.ToString(); 我希望通过为实际的市场选择设置字符串来动态设置市场标签 string currentMarketSelected= this.marketTextBox.Text; // Specific market: COLXPM string marketlabel=allmarketdata.@return.ma

我目前正在通过此方法设置一些字符串:

string marketlabel = allmarketdata.@return.markets.COLXPM.label.ToString();
我希望通过为实际的市场选择设置字符串来动态设置市场标签

string currentMarketSelected= this.marketTextBox.Text; // Specific market: COLXPM

string marketlabel=allmarketdata.@return.markets.currentMarketSelected.label.ToString();
我已经搜索了几个小时,可能没有正确解释。我尝试了一些思考的东西,但没有成功。基本上,我想做的是有一个文本框或列表,其中包含所有的市场名称,并根据其中一个选择开始设置数据

上面是我想要做的最好的例子,即使在语法上不可能在适当的地方使用变量

public class Markets
{
    public COLXPM COLXPM { get; set; }
    //Lots of markets below here
}

public class COLXPM
{
    public string marketid { get; set; }
    public string label { get; set; }
    public string lasttradeprice { get; set; }
    public string volume { get; set; }
    public string lasttradetime { get; set; }
    public string primaryname { get; set; }
    public string primarycode { get; set; }
    public string secondaryname { get; set; }
    public string secondarycode { get; set; }
    public List<Recenttrade> recenttrades { get; set; }
    public List<Sellorder> sellorders { get; set; }
    public List<Buyorder> buyorders { get; set; }
}
public class Return
{
    public Markets markets { get; set; }
}

public class RootObject
{
    public int success { get; set; }
    public Return @return { get; set; }
}

你需要这样的东西:

public class Markets
{
    public COLXPM this[string key]
    {
        get
        {
            COLXPM colxpm;

            switch (key)
            {
                // TODO : use "key" to select instance of COLXPM;
                case "example1":
                    colxpm = ...;
                    break;

                default:
                    throw new NotSupportedException();
            }

            return colxpm;
        }
    }
}
然后,您可以执行以下操作:

string marketlabel=allmarketdata.@return.markets[currentMarketSelected]label.ToString();

这是一个索引属性。

这里是一个使用反射的解决方案

string currentMarketSelected= this.marketTextBox.Text; // Specific market: COLXPM

var property = allmarketdata.@return.markets.GetType().GetProperty(currentMarketSelected);
dynamic market = property.GetGetMethod().Invoke(allmarketdata.@return.markets, null);
string marketlabel=market.label.ToString();

如果不知道你在使用什么课程,我们无法帮助你。这些看起来完全不熟悉。“allmarketdata@return.markets”,这会编译吗?@Voice我只想用一个字符串变量替换其中一个类名。我希望我的代码使用的类名将根据选择的UI元素不时更改。我会尝试一下,并在测试完成后尽快回复。我确信此方法有效,我避免使用它的唯一原因是我必须更新大约92个定义,以包含您在上面添加的许多逻辑。我很高兴您找到了一个有效的解决方案。祝你好运!为了验证它的有效性,我尝试了其他市场的数据结构,效果非常好。我不得不将它从allmarketdata移到一个上面。@return to allmarketdata.@return.markets我相应地修复了发布的解决方案。
string currentMarketSelected= this.marketTextBox.Text; // Specific market: COLXPM

var property = allmarketdata.@return.markets.GetType().GetProperty(currentMarketSelected);
dynamic market = property.GetGetMethod().Invoke(allmarketdata.@return.markets, null);
string marketlabel=market.label.ToString();