我正在开发一个交易API(来自交互式经纪人的activex),它有一个叫做的方法:
void reqMktDataEx(int tickerId, IContract contract, string generalDetails, int snapshot)
Run Code Online (Sandbox Code Playgroud)
问题在于最后一个参数"int snapshot",它显然需要一个int输入,它实际上表明交易者是否想要快照市场数据.所以我想如果我把它设置为非零,那么隐式转换会将这个非零bool
值转换为值"true".
但是,我使用c#连接到这个api.在此之前一切都很好.我试过这个:
A. void reqMktDataEx(1, AUDUSD, "100", 0)
请忽略前三个参数"1,AUDUSD,"100"",唯一的问题是最后一个0为int.我在调试期间暂停了,信息是:"指定的强制转换无效.Invalidcastexception未处理"和"从数字转换时,数字不能为无穷大".
在此之后,我了解到c#将1作为bool true处理,0作为bool false,根据此Web 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"))
Run Code Online (Sandbox Code Playgroud)
投诉是输入字符串格式不正确.确保方法参数的格式正确.
MY GUESS:这是C#的内部配置,它不将0视为false,将1视为true.有什么办法可以解决吗?
首先编辑
正如下面一位专业程序员所怀疑的那样,我在这里为他发布合同类和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";
}
}
}
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,Forex类继承自TWS.IContract.怎么不能连续投射到Icontract?
Mer*_*ham 82
有一个没有隐式转换bool
到int
.只有一个明确的:
Convert.ToInt32(someBool)
// or...
someBool ? 1 : 0
Run Code Online (Sandbox Code Playgroud)
首先,您不能隐式地将bool转换为int.C#编译器使用此规则来强制执行程序正确性.强制要求您无法在if语句中测试整数.
int
没有无限的概念.只做float
和double
做.这意味着它与该参数无关,除非该参数仅控制实际崩溃的代码流.这仍然意味着它不是导致问题的转换.
你得到一个不同的错误,int.Parse("false")
因为它期望一个数字,而不是一个真/假值.这将始终在运行时抛出一个异常,但它会扔在你的代码,而不是在图书馆的代码.
我开始认为这是contract
你提供的第二个参数AUDUSD
.
还有一种方法是使用扩展方法:
public static class BooleanExtensions
{
public static int ToInt(this bool value)
{
return value ? 1 : 0;
}
}
Run Code Online (Sandbox Code Playgroud)
然后可以使用:
bool result = false;
result.ToInt();
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49583 次 |
最近记录: |