gpt4 book ai didi

c# - Boolean int 转换问题

转载 作者:IT王子 更新时间:2023-10-29 04:07:21 25 4
gpt4 key购买 nike

我正在开发一个交易 API(来自交互式经纪人的 activex),它有一个名为:

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

问题在于最后一个参数“int snapshot”,它显然需要一个 int 输入,它实际上表明交易者是否想要快照市场数据。所以我想如果我将它设置为非零值,那么隐式转换会将这个非零值转换为 bool 值“true”。

但是,我正在使用 c# 连接到此 api。一切都很好,直到这一次。我试过这个:

一个。 void reqMktDataEx(1, AUDUSD, "100", 0)请忽略前三个参数“1,AUDUSD,”100“,唯一重要的是最后一个0作为int。我在调试过程中暂停了,信息是:“指定的转换无效。Invalidcastexception 未处理”和“从数字转换时,数字不能为无穷大”。

在这之后我了解到,根据这个,c# 很难将 1 视为 bool true 并将 0 视为 bool false IMPLICITLY网站 http://www.dotnetperls.com/convert-bool-int

B.我试过这个void reqMktDataEx(1, AUDUSD, "100", Convert.ToInt16(false)) 我又遇到了类似的错误。

C.我又试了一次:

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

投诉是输入字符串的格式不正确。确保您的方法参数格式正确。

我的猜测:这是 C# 的内部配置,它不会将 0 视为 false,将 1 视为 true。有什么办法可以解决吗?

第一次编辑

正如下面一位专业程序员所怀疑的那样,我在这里为他发布了契约(Contract)类和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);
}

第二次编辑:

  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?

最佳答案

没有从 boolint 的隐式转换。只有一个明确的:

Convert.ToInt32(someBool)
// or...
someBool ? 1 : 0

From that site you linked :

First, you cannot implicitly convert from bool to int. The C# compiler uses this rule to enforce program correctness. It is the same rule that mandates you cannot test an integer in an if statement.

编辑

int 没有无穷大的概念。只有 floatdouble 可以。这意味着它不会与该参数相关,除非该参数仅控制实际崩溃的代码流。这仍然意味着它不是导致问题的转换。

int.Parse("false") 会出现不同的错误,因为它需要一个数字,而不是 true/false 值。这将始终在运行时抛出异常,但它会抛出您的代码,而不是库的代码。

我开始认为这是第二个参数,contract,您为此提供了 AUDUSD

关于c# - Boolean int 转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8457366/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com