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();