我正在使用TL语言编译器来编译C#中用https://core.telegram.org/mtproto描述的Telegram Api TL语言的模式
有一个编译器可以将tl-language编译成C#类https://github.com/everbytes/SharpTL.Compiler
但是它可以在下面这一行编译新的电报模式:
"params":[
{"name":"flags","type":"#"},
{"name":"report_spam","type":"flags.0?true"}]
,"type":"PeerSettings"}然后把它编译成错误的代码:
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
[TLProperty(1)]
public I# Flags { get; set; }
[TLProperty(2)]
public IFlags0?true ReportSpam { get; set; }
}在C#代码中进行强制转换有什么解决方案吗?
我不知道C#中这个"flags:#“的类型是什么
此类型"#“在https://core.telegram.org/mtproto/TL-formal中描述
user {flags:#} id:flags.0?string first_name:flags.1?string last_name:flags.2?string reserved3:flags.3?False reserved4:flags.4?False = User flags;将来,在改变reserved3和reserved4字段的名称和类型之后,可以使用标志字段中的比特3和4来发送新字段
发布于 2017-01-31 13:48:30
根据TLGenerator,这意味着int
发布于 2017-06-22 13:53:04
peerSettings#818426cd flags:# report_spam:flags.0?true = PeerSettings 我认为这个散列(#)意味着变量的动态值,在某些情况下它可以是真或假,另一些情况下它可以是一个非负的整数序列:
matrix {X:Type} m:# n:# a:(%Tuple (%Tuple X m) n) = Matrix X;上面我们得到的M和N取一个大于0的整数随机值
get_users req_fields:# ids:%(Vector int) = Vector %(User req_fields)在另一种情况下,它可以假设一个条件值
req_fields变量仅强制转换为User对象,但在其他情况下也可以转换
到另一种物体上。
也许在c#中这个TLObject的正确方式是:
[TLObject(0x818426CD)]
public partial class PeerSettings : IPeerSettings
{
[TLProperty(1)]
public int Flags { get; set; }
[TLProperty(2)]
public bool ReportSpam { get; set; }
}抱歉,我的英语生疏了
https://stackoverflow.com/questions/37434208
复制相似问题