【问题标题】:alternative to dynamic variable name in C#替代 C# 中的动态变量名
【发布时间】:2012-10-14 22:57:19
【问题描述】:

我正在使用基于 C# 的脚本语言的 NinjaTrader 编写我的自定义指标。我想在不同的股票图表之间共享数据,但没有固有的方法可以这样做。每个指标都继承自一个指标类,当然每个图表都运行一个应用的任何指标的唯一实例。

例如,我希望能够将 IBM 的当前价格“发送”到 AAPL 图表。从概念上讲,在“发送”图表上,我需要能够执行以下操作:

静态双 IBM = 190.72;

但是,例如,当用户将图表代码从 IBM 更改为 DELL 时,我现在需要类似:

静态双 DELL = 9.25;

在我的“接收”图表上,我希望能够做类似的事情 打印(戴尔);

所以我倾向于拥有一个根据用户为图表选择的股票代码动态分配的变量名称,但是我知道这在 C# 中是不可能的。那么,当存在一组实际上无限的潜在代码值时,存储和检索需要按代码名称索引的数据的替代方法是什么?

【问题讨论】:

标签: c# global-variables instance-variables


【解决方案1】:

为什么不使用dictionary 之类的东西?例如:

var stocks = new Dictionary<string, double>();
stocks.Add("appl", 1234.56);
Print(stocks["appl"]);

您可以根据需要为其动态添加代码名称和值,按代码进行查找,以及许多其他有用的功能。您想要单个变量而不是集合的任何原因?

【讨论】:

  • 集合听起来比单个变量好,只是以前不需要使用它。我将如何设置它以使我能够在包含类的 2 个单独实例之间共享字典内容?
  • 这似乎真的是一个单独的第二个问题,更多地与您如何设置类和依赖项有关,而不是如何表示数据。也许还有一个问题?
  • 虽然,第二个问题的答案可能会排除使用字典作为解决方案的一部分,我明白你的意思,会单独问,谢谢。
  • 不要忘记将此答案标记为“已接受”,因为它满足了您对动态命名变量集合的需求。
【解决方案2】:

创建一个对象:

public class Stock {
  public string Ticker{get; set;}
  public double Price {get; set;}
}

然后引用列表中所有可能的股票:

  List<Stock> allStocks = new List<Stock>();
   allStocks.Add(new Stock() { Ticker = "Dell", Price = 9.25 });

   allStocks.ForEach(stock => Print(string.Format("{0} : {1}", stock.Ticker, stock.Price) );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2012-12-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-16
    • 2012-11-22
    相关资源
    最近更新 更多