【发布时间】:2010-12-23 17:26:35
【问题描述】:
这是一个相当新手的问题,但是因为我花了一个下午的时间尝试并且没有任何想法,所以我想我将它发布在 Stackoverflow 上。
我正在构建一个从开源 API 提取数据的程序。我还是个初学者,所以我试着慢慢调整数据,让它以我想要的方式显示。但是,我收到错误“当前上下文中不存在名称'MyOptionChainsInput'”,不知道如何解决。
我的目标是创建一个在“contract_details”中填充的列表,以便可以在其他方法中访问该列表(例如在 Main() 中,我的属性有但没能做到)。
我的代码
using System;
using System.Collections.Generic;
using System.Text;
using Krs.Ats.IBNet;
using System.Threading;
using Krs.Ats.IBNet.Contracts;
namespace Krs.Ats.TestApp
{
public class Tester
{
List<double> optionChainStrikes = new List<double>();
List<string> optionChainExpiration = new List<string>();
// properties
public List<double> OptionChainStrikes
{
get
{
return optionChainStrikes;
}
set
{
value = optionChainStrikes;
}
}
public List<string> OptionChainExpiration
{
get
{
return optionChainExpiration;
}
set
{
value = optionChainExpiration;
}
}
public void MyOptionChainsInput(string expirationDate, double strike)
{
optionChainExpiration.Add(expirationDate);
optionChainStrikes.Add(strike);
}
}
class Program
{
static void Main(string[] args)
{
// Commented code
client.ContractDetails += contract_details;
// Because of this line, the method 'contract_details' (see below) has to be static.
// Output the info of the option chains (This works and is an option, however, is it the best way?)
Tester t = new Tester();
t.MyOptionChainOutput();
}
static void contract_details(object sender, ContractDetailsEventArgs e) // This method has to be static.
{
//Tester t = new Tester(); // This creates on each call an new Tester instances, which also deletes the list.
//t.MyOptionChainsInput(e.ContractDetails.Summary.Expiry, e.ContractDetails.Summary.Strike);
MyOptionChainsInput(e.ContractDetails.Summary.Expiry, e.ContractDetails.Summary.Strike); // this doesn't work either
}
}
}
乍一看,解决方法很简单:
- 将方法“contract_details”公开,以便它可以访问“MyOptionsChainInput”方法,或者
- 在“contract_details”中创建一个新的 Tester 实例,然后访问 MyOptionsChainInput。
但是,由于提供此选项数据的 API 接口的限制,这两个选项都不可能。我该如何解决这个问题?也许我什至需要丢弃类 Tester 并找到另一种方法?
【问题讨论】: