Проблема с логическим преобразованием int

Я работаю над торговым API (activex от интерактивных брокеров), который имеет метод под названием:

void reqMktDataEx(int tickerId, IContract contract, string generalDetails, int snapshot)

Проблема связана с последний параметр "int snapshot", который, очевидно, требует ввода int, который фактически указывает, хочет ли трейдер снимать рыночные данные или нет. Итак, я предполагаю, что если я установлю его в ненулевое значение, то неявное преобразование преобразует это ненулевое значение в bool значение «истина».

Однако я использую C # для подключения к этому API. До этого все было хорошо. Я пробовал это:

A. void reqMktDataEx (1, AUDUSD, "100", 0) Не обращайте внимания на первые три параметра «1, AUDUSD,« 100 »», единственный вопрос - последний 0 как int. Я был приостановлен во время отладки, и информация: «Указанное приведение недопустимо. Invalidcastexception не обрабатывается» и «при преобразовании из числа число не должно быть бесконечным».

После этого я узнал, что для C # сложно трактовать 1 как bool true, а 0 как bool false НЕПОСРЕДСТВЕННО в соответствии с этим веб http://www.dotnetperls.com/convert-bool-int

B. Я пробовал это void reqMktDataEx (1, AUDUSD, "100", Convert.ToInt16 (false)) Я снова получил аналогичную ошибку.

С. Я попробовал еще раз вот это:

void reqMktDataEx(1, AUDUSD, "100", int.Parse("false"))

жалоба на то, что входная строка была в неправильном формате. Убедитесь, что аргументы вашего метода имеют правильный формат.

МОЕ УГДАЛЕНИЕ: Вот внутренняя конфигурация C #, которая не рассматривает 0 как ложь и 1 как истину. Есть ли способ решить эту проблему?

First Edit

Как и подозревал один профессиональный программист, приведенный ниже, я размещаю здесь для него контрактный класс и определение audusd. заранее спасибо

namespace InteractiveBrokersTradingSystem
{
    class Contract:TWSLib.IContract
    {
        public int conId { get; set; }
        public string symbol { get; set; }
        public string secType { get; set; }
        public string expiry { get; set; }
        public double strike { get; set; }
        public string right { get; set; }
        public string multiplier { get; set; }
        public string exchange { get; set; }
        public string primaryExchange { get; set; }
        public string currency { get; set; }
        public string localSymbol { get; set; }
        public int includeExpired { get; set; }
        public object comboLegs { get; set; }
        public object underComp { get; set; }
        public string comboLegsDescrip { get; set; }
        public string secIdType { get; set; }
        public string secId { get; set; }
    }
}

namespace InteractiveBrokersTradingSystem
{
    class Forex:Contract
    {
        public Forex(string preCurrency,string baseCurrency)
        {
            //conId = 14433401;
            symbol = preCurrency;
            secType = "CASH";
            exchange = "IDEALPRO";
            currency = baseCurrency;
            strike = 0;
            includeExpired = 0;
            primaryExchange = "IDEALPRO";       
        }
    }
}

Метод, который я использую для вызова reqMktDataEx: во-первых, реализация, простое наследование:

public void MyReqMarketData(int tickId, IContract contract, string tickTypes, int snapshot)
{
    reqMktDataEx(tickId, contract, tickTypes, snapshot);
}


 private void AudButtonItemItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
 {
     Forex audusd = new Forex("AUD", "USD");

      _myTwsClass.MyReqMarketData(1,audusd, "100", 0);
  }

Second Edit :

  System.InvalidCastException was unhandled
  Message=Unable to cast object of type 'InteractiveBrokersTradingSystem.Forex' to type 'TWSLib.IContract'.
  Source=InteractiveBrokersTradingSystem

Похоже, здесь есть некоторая проблема приведения типов между определенным мною форекс-классом и вещью Icontract com. Вот мое новое определение:

namespace InteractiveBrokersTradingSystem
{
    class Forex
    {
        public int conId { get; set; }
        public string symbol { get; set; }
        public string secType { get; set; }
        public string expiry { get; set; }
        public double strike { get; set; }
        public string right { get; set; }
        public string multiplier { get; set; }
        public string exchange { get; set; }
        public string primaryExchange { get; set; }
        public string currency { get; set; }
        public string localSymbol { get; set; }
        public int includeExpired { get; set; }
        public object comboLegs { get; set; }
        public object underComp { get; set; }
        public string comboLegsDescrip { get;set; }
        public string secIdType { get; set; }
        public string secId { get; set; }

        public Forex(string preCurrency,string baseCurrency)
        {
            //conId = 0;
            //symbol = preCurrency;
            //secType = "CASH";
            //expiry = null;
            //strike = double.Parse("0");
            //right = null;
            //multiplier = null;
            //exchange = "IDEALPRO";
            //primaryExchange = "IDEALPRO";
            //currency = baseCurrency;
            //localSymbol = null;
            //includeExpired = 0;
            //comboLegs = null;
            //underComp = null;
            //comboLegsDescrip = null;
            //secType = null;
            //secId = null;
        }
    }
}

Как видите, класс Forex наследуется от TWS.IContract. как его нельзя было последовательно использовать в Icontract?

34
задан Uwe Keim 23 August 2019 в 06:11
поделиться