Имя не может быть найдено в текущем контексте - PullRequest
0 голосов
/ 23 декабря 2010

Это довольно интересный вопрос для новичка, но, поскольку я провел целый день, пытаясь, и у меня не осталось идей, я решил разместить его здесь, в 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', или
  • Создайте новый экземпляр Tester в 'contract_details' и затем получите доступ к MyOptionsChainInput.

Однако из-за ограничений интерфейса API, который предоставляет данные этой опции, обе опции невозможны. Как я могу решить это? Возможно, мне даже нужно отказаться от класса Tester и найти другой способ?

Ответы [ 2 ]

1 голос
/ 23 декабря 2010

Итак, держите статический экземпляр тестера рядом.

// keep a static instance around static Tester tester = new Tester(); static void contract_details(object sender, ContractDetailsEventArgs e) // This method has to be static. { // call the method on the static instance tester.MyOptionChainsInput(e.ContractDetails.Summary.Expiry, e.ContractDetails.Summary.Strike); }

1 голос
/ 23 декабря 2010

Самый простой способ - просто поместить метод в класс.Посмотрите на ваш дизайн, посмотрите, какой объект должен содержать такой метод, и поместите его туда.Идея состоит в том, чтобы создать экземпляр объекта, который будет зарегистрирован на событие.

Допустим, классу Бла будет принадлежать метод:

static void Main(string[] args)
   {
        // Commented code
        Blah temp = new Blah();
        client.ContractDetails += temp.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(); 
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...